最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript解決單線程缺陷webWorker問題

 更新時間:2023年06月10日 09:09:23   作者:webAPI  
Web Worker 為 Web 內(nèi)容在后臺線程中運行腳本提供了一種簡單的方法,本文給大家介紹JavaScript解決單線程缺陷——webWorker,需要的朋友可以參考下

解決JavaScript單線程問題——webWorkers

參考文檔 使用 Web Workers - Web API 接口參考 | MDN (mozilla.org)

MDN的介紹為:

Web Worker 為 Web 內(nèi)容在后臺線程中運行腳本提供了一種簡單的方法。線程可以執(zhí)行任務(wù)而不干擾用戶界面。此外,它們可以使用 XMLHttpRequest(盡管 responseXML 和 channel 屬性總是為空)或 fetch(沒有這些限制)執(zhí)行 I/O。一旦創(chuàng)建,一個 worker 可以將消息發(fā)送到創(chuàng)建它的 JavaScript 代碼,通過將消息發(fā)布到該代碼指定的事件處理器(反之亦然)。

簡單來說就是, 我們可以通過使用worker為主線程分擔(dān)數(shù)據(jù)處理壓力.
假如說你有一段很大的數(shù)據(jù)需要處理, 而你又不想這段程序阻礙你的其他操作,這時候就可以考慮一下webWorker.

如何使用webWorker

創(chuàng)建worker

  • 先創(chuàng)建一個worker.js文件, 該文件為線程代碼文件, 文件中的代碼會在后臺線程中運行.

在主線程中創(chuàng)建一個worker, 通過類似通訊的方式在主線程和worker中進行數(shù)據(jù)傳遞.

// index.js主線程代碼塊
// 簡單創(chuàng)建一個worker名為myworker
let myworker = new Worker("./firstworker.js") // 參數(shù)為firstworker.js文件的路徑

主線程和worker之間進行通訊

主線程發(fā)送數(shù)據(jù)給worker: 在主線程中通過 worker.prototype.postMessage() 進行通信

// index.js主線程代碼塊
// ... 創(chuàng)建完worker
console.log("主線程我說句話先,接下來你要替我干活了.");
// 簡單向worker中發(fā)送一個數(shù)組[1, 2, 3]
myworker.postMessage([1, 2, 3]);

worker接收來自主線程的數(shù)據(jù): 在myworker.js中接收數(shù)據(jù)

// firstworker.js代碼塊
// 接收來自主線程的數(shù)據(jù),數(shù)組[1, 2, 3]
onmessage = function recive(msg) {
    // 接收到的是一個MessageEvent對象, 我們可以獲取data屬性
    console.log(msg.data); // 輸出[1, 2, 3]
};

我們也可以使用更簡潔的方式

// firstworker.js代碼塊
// 使用解構(gòu)和匿名箭頭函數(shù)
onmessage = ({ data }) => {
  console.log(data); // 輸出[1, 2, 3]
};

worker發(fā)送數(shù)據(jù)給主線程: 通過 postMessage() 發(fā)送數(shù)據(jù)給主線程 index.js

接收到數(shù)組[1, 2, 3]之后, 我們可以簡單的對數(shù)組進行一個逆序操作, 再把結(jié)果返回主線程

// firstworker.js代碼塊
onmessage = ({ data }) => {
    // 主線程發(fā)來的數(shù)據(jù)
    console.log("主線程發(fā)來的數(shù)據(jù):", data);
    // 賦值一個新變量newdata
    let newdata = data;
    // 對新變量操作(數(shù)組逆序)
    newdata.sort((a, b) => {
        return b - a;
    });
    console.log("worker后臺線程處理完成的數(shù)據(jù)newdata:", newdata);
    // 處理完的結(jié)果遞交給主線程
    postMessage(newdata);
};

主線程接收worker訊息: 通過 addEventListener() 對worker的動作進行監(jiān)聽

// index.js主線程代碼塊
// 主線程通過 監(jiān)聽 實例的message事件獲取worker的數(shù)據(jù)
// 接收myworker處理之后的結(jié)果
myworker.addEventListener("message", ({ data }) => {
    console.log("接收到來自worker處理完的數(shù)據(jù):", data);
});

關(guān)閉線程

worker.terminate()可以幫助我們在主線程中隨意關(guān)閉線程, 即為從主線程中立刻終止一個運行中的 worker

// index.js主線程代碼塊
// 3s后關(guān)閉線程
setTimeout(() => {
    console.log("關(guān)閉myworker,你別說話了")
    myWorker.terminate();
}, 3000);
// firstworker.js代碼塊
setTimeout(() => {
    console.log("4秒時讓我說句話")
}, 4000);

worker監(jiān)聽

主線程通過 addEventListener() 對worker動作進行監(jiān)聽, 動作包含三種

  • message
  • error
  • messageError:

注意事項

  • worker是HTML5規(guī)范的API,所以你沒法在node環(huán)境中使用.
  • worker沒辦法對dom元素操作, 只能在主線程中, 多線程操作dom感覺就不大好.
  • worker可以用于執(zhí)行長時間運行的計算、處理大量數(shù)據(jù)、執(zhí)行網(wǎng)絡(luò)請求等任務(wù),而不會影響用戶界面的響應(yīng)性能.幫助開發(fā)人員提高Web應(yīng)用程序的性能和響應(yīng)性能.
  • 本文章只對worker的使用進行了簡單介紹, 具體進階用法等詳細(xì)內(nèi)容還得參考MDN文檔(共享worker, 線程安全, 嵌入式worker等)

到此這篇關(guān)于JavaScript解決單線程缺陷——webWorker的文章就介紹到這了,更多相關(guān)js單線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端printjs的使用實戰(zhàn)案例

    前端printjs的使用實戰(zhàn)案例

    Print.js是一個小的javascript庫,可幫助您從網(wǎng)絡(luò)上打印,這篇文章主要給大家介紹了關(guān)于前端printjs的使用實戰(zhàn)案例,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 基于JavaScript實現(xiàn)本地圖片預(yù)覽

    基于JavaScript實現(xiàn)本地圖片預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實現(xiàn)本地圖片預(yù)覽的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • js創(chuàng)建子窗口并且回傳值示例代碼

    js創(chuàng)建子窗口并且回傳值示例代碼

    本文為大家詳細(xì)介紹喜愛使用js創(chuàng)建子窗口并且實現(xiàn)回傳值的示例,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • ant-design-pro使用qiankun微服務(wù)配置動態(tài)主題色的問題

    ant-design-pro使用qiankun微服務(wù)配置動態(tài)主題色的問題

    這篇文章主要介紹了ant-design-pro使用qiankun微服務(wù)配置動態(tài)主題色,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • JS數(shù)組實現(xiàn)分類統(tǒng)計實例代碼

    JS數(shù)組實現(xiàn)分類統(tǒng)計實例代碼

    本文通過實例代碼給大家介紹了js數(shù)組實現(xiàn)分類統(tǒng)計的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 最新評論

    靖江市| 揭东县| 乌苏市| 长治县| 安康市| 泗洪县| 蓬溪县| 育儿| 塔河县| 赤峰市| 新巴尔虎左旗| 石首市| 哈密市| 乳山市| 富民县| 民丰县| 略阳县| 宜兰县| 东乌珠穆沁旗| 五华县| 和林格尔县| 蒙城县| 青阳县| 多伦县| 鞍山市| 温宿县| 望谟县| 衡南县| 富裕县| 柯坪县| 文昌市| 张家港市| 宜兴市| 延安市| 娄底市| 正蓝旗| 广河县| 乌什县| 湖口县| 股票| 阳信县|