WebWorkers在項目中的使用案例

Worker | 文檔

worker 線程的關閉在主線程和 worker 線程都能進行操作,但對 worker 線程的影響略有不同。

// main.js(主線程)
const myWorker = new Worker('/worker.js'); // 創建worker
myWorker.terminate(); // 關閉worker
復制代碼
// worker.js(worker線程)
self.close(); // 直接執行close方法就ok了
復制代碼

無論是在主線程關閉 worker,還是在 worker 線程內部關閉 worker,worker 線程當前的 Event Loop 中的任務會繼續執行。至于 worker 線程下一個 Event Loop 中的任務,則會被直接忽略,不會繼續執行。

區別是,在主線程手動關閉 worker,主線程與 worker 線程之間的連接都會被立刻停止,即使 worker 線程當前的 Event Loop 中仍有待執行的任務繼續調用?postMessage()?方法,但主線程不會再接收到消息。

在 worker 線程內部關閉 worker,不會直接斷開與主線程的連接,而是等 worker 線程當前的 Event Loop 所有任務執行完,再關閉。也就是說,在當前 Event Loop 中繼續調用?postMessage()?方法,主線程還是能通過監聽message事件收到消息的

new Worker() 用于創建一個新的 Web Worker 線程。Web Worker 是瀏覽器提供的一種多線程機制,它可以在后臺執行 JavaScript 代碼,不會阻塞主線程,從而提高了 Web 應用程序的性能和響應能力。
?
以下是一個示例代碼,演示了如何使用 new Worker() 創建一個新的 Web Worker 線程:
?
// 創建一個 Web Worker 線程
const worker = new Worker('worker.js');
在上述示例中,我們創建了一個名為 worker 的 Web Worker 線程,并指定了要執行的 JavaScript 文件為 worker.js。
?
需要注意的是,Web Worker 線程中不能直接訪問 DOM,也不能使用一些瀏覽器環境中的 API(如 alert()、confirm()、prompt()、localStorage 等)。同時,Web Worker 線程和主線程之間是通過消息通信來進行交互的,要向 Web Worker 線程發送消息,可以使用 worker.postMessage() 方法;要監聽 Web Worker 線程的消息,可以使用 worker.onmessage 事件。

?一、直接引用絕對路徑文件?
若Worker腳本文件以?靜態資源形式存放?(如public/worker.js),可直接通過路徑引用:

vue2// 主線程代碼

// worker.js 代碼

vue3+vite+ts??//主線程代碼

?// worker.js 代碼

二、需要配置的情形

使用動態模塊路徑或需要引入第三方庫時,必須通過worker-loader處理:?

1.安裝依賴? npm install worker-loader -D

2.配置vue.config.js?? ? 添加Webpack規則處理.worker.js后綴文件:

chainWebpack: config => {config.module .rule('worker') .test(/\.worker\.js$/) .use('worker-loader') .loader('worker-loader') .end(); 
config.module.rule('js').exclude.add(/\.worker\.js$/) 
}

?//TypeScript項目?
//需聲明Worker模塊類型(創建worker.d.ts文件):

declare module '*.worker.js' { class WebWorker extends Worker { constructor(); } export default WebWorker; } }

3.案例:

主線程代碼

work.js

self.onmessage=(event)=>{const result = event.data.reduce((acc, cur) => acc + cur, 0)self.postMessage(result)self.close()
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75726.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掌握Linux項目自動化構建:從零入門make與Makefile

文章目錄 前言: 一、初識自動化構建工具1.1 什么是make/Makefile?1.2 快速體驗 二、深入理解核心機制2.1 依賴關系與依賴方法2.2 偽目標的妙用2.3 具體語法a.makefile的基本雛形b.makefile推導原則! 三、更加具有通用型的makefile1. 變量定義…

深度分頁優化思路

深度分頁優化思路 思考以下問題 查詢以下SQL的流程是怎么樣的呢? 為什么只查詢10條數據需要7秒? # 查詢時間7秒 SELECT * FROM user ORDER BY age LIMIT 1000000, 10問題分析 為什么分頁查詢隨著翻頁的深入,會變得越來越慢。 其實&#xff0…

使用 Vite 提升前端開發體驗:入門與配置指南

在現代前端開發中,構建工具的選擇對開發效率和項目性能有著至關重要的影響。Vite 是一個新興的前端構建工具,由 Vue.js 的作者尤雨溪開發,旨在通過利用現代瀏覽器的原生 ES 模塊特性,提供更快的開發服務器啟動速度和更高效的熱更新…

MYSQL基本語法使用

目錄 一、mysql之DML 增加語句 刪除語句和truncate 更新語句 replace語句 select查詢語句 二、select多種用法 查詢時的別名使用 分組 分組后的篩選 結果排序 分頁功能 分表 多表關聯查詢 練習題 一、單表查詢 二、多表查詢 前面已經學習了mysql的安裝和基本語…

自動化測試selenium(Java版)

1.準備工作 1.1.下載瀏覽器 自動化測試首先我們要準備一個瀏覽器,我們這里使用谷歌(chrome)瀏覽器. 1.2.安裝驅動管理 每一個瀏覽器都是靠瀏覽器驅動程序來啟動,但是瀏覽器的版本更新非常快,可能我們今天測試的是一個版本,第二天發布了一個新的版本,那么我們就要重構代碼,很…

HarmonyOS Next應用架構設計與模塊化開發詳解

引言 在HarmonyOS Next開發中,合理的應用架構設計和模塊化開發是構建高效、可維護應用的關鍵。本文將深入探討HarmonyOS Next應用的架構設計思路,并通過實際代碼示例展示如何實現模塊化開發。 應用架構設計 HarmonyOS Next應用通常采用分層架構設計&…

伊利工業旅游4.0,近距離感受高品質的魅力

3月24日,在2025年第112屆全國糖酒會(簡稱春糖)前夕,伊利集團“可感知高品質探尋薈”活動在成都召開,記者走進伊利在西南地區最大的乳制品生產基地—邛崍工廠,零距離見證液態奶、酸奶、冷飲等乳制品的誕生&a…

測試用例生成平臺通過大模型升級查詢功能,生成智能測試用例

在測試工作中,查詢功能是各類系統的核心模塊,傳統的測試用例編寫往往耗時且重復。如何讓老舊平臺煥發新活力?本文將結合大模型技術,通過用戶輸入的字段信息,自動化生成高效、精準的測試用例。同時,我們還將…

基于javaweb的SpringBoot雪具商城系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

【AI學習筆記】Coze平臺實現將Excel文檔批量導入數據庫全過程

背景前搖&原視頻教程: 最近看到很多同學都在用Coze平臺操作數據,我也想了解一下工作流的搭建和數據處理過程,但是一下子又看不懂太復雜的邏輯,于是上B站搜索相關的基礎教程。 Coze官方教程: 之前有看過Coze平臺…

【Axure高保真原型】縱向圖片輪播

今天和大家分享縱向圖片輪播的原型模版,載入后會自動循環輪播,鼠標移入圖片后停止輪播,可以通過點擊上下箭頭,向上或向下滑動切換上一張或下一張圖片,也可以點擊右側小圓點快速切換至對應圖片……具體效果可以打開下方…

力扣32.最長有效括號(棧)

32. 最長有效括號 - 力扣&#xff08;LeetCode&#xff09; 代碼區&#xff1a; #include<stack> #include<string> /*最長有效*/ class Solution { public:int longestValidParentheses(string s) {stack<int> st;int ans0;int ns.length();st.push(-1);fo…

如何在 React 項目中使用React.lazy和Suspense實現組件的懶加載?

大白話如何在 React 項目中使用React.lazy和Suspense實現組件的懶加載&#xff1f; 在 React 項目里&#xff0c;有時候組件功能多、體積大&#xff0c;要是一次性把所有組件都加載進來&#xff0c;網頁加載速度就會變慢。而 React 提供了 React.lazy 和 Suspense 這兩個好東西…

ffmpeg-將多個視頻切片成一個新的視頻

使用 ffmpeg 工具可以輕松完成將多個視頻切片合并為一個新的視頻。以下是實現這一目標的具體步驟和命令。 步驟概覽 1、將多個視頻切片。 2、創建文本文件列出切片的視頻片段。 3、使用 ffmpeg 合并這些切片為一個新的視頻。 一&#xff1a;安裝 ffmpeg 確保你的系統中已經安…

【第2月_day10】Pandas數據查看與選擇

以下是專為小白設計的 Pandas數據查看與選擇 學習內容&#xff0c;從基礎到應用逐步講解&#xff0c;附帶清晰示例和注意事項&#xff1a; 一、數據查看&#xff1a;快速了解你的數據 1. head() 和 tail() 作用&#xff1a;查看數據的前幾行或后幾行&#xff0c;默認顯示5行。…

Jetpack LiveData 使用與原理解析

一、引言 在 Android 開發中&#xff0c;數據的變化需要及時反映到界面上是一個常見的需求。然而&#xff0c;傳統的方式可能會導致代碼復雜、難以維護&#xff0c;并且容易出現內存泄漏等問題。Jetpack 組件中的 LiveData 為我們提供了一種優雅的解決方案&#xff0c;它是一種…

Unity2D 五子棋 + Photon聯網雙人對戰

開發環境配置 Unity版本2022.3 創建Photon賬號以及申請Photon中國區服務 官網申請賬號&#xff1a;Multiplayer Game Development Made Easy Photon Engine 中國區服務&#xff1a; 光子引擎photonengine中文站 成都動聯無限科技有限公司(vibrantlink.com) 導入PUN2插件以及…

(UI自動化測試web端)第二篇:元素定位的方法_css定位之屬性選擇器

看代碼里的【find_element_by_css_selector( )】( )里的表達式怎么寫&#xff1f; 文章介紹了第四種寫法屬性選擇器 &#xff0c;你要根據網頁中的實際情況來判斷自己到底要用哪一種方法來進行元素定位。每種方法都要多練習&#xff0c;全都熟了之后你在工作當中使用起來元素定…

預編譯能否 100%防 sql 注入?

&#x1f31f; 什么是 SQL 注入&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是指攻擊者利用特殊輸入&#xff0c;讓數據庫執行它本來不應該執行的代碼&#xff0c;從而獲取或篡改數據。 就像在考試的時候偷偷改題目&#xff0c;讓老師改成你想要的內容&#…

第十五章 | Layer2、Rollup 與 ZK 技術實戰解析

&#x1f4da; 第十五章 | Layer2、Rollup 與 ZK 技術實戰解析 ——構建下一代高性能區塊鏈應用&#xff0c;從 Solidity 到 zkSync&#xff01; ? 本章導讀 Layer2 和零知識證明&#xff08;ZK&#xff09;正成為區塊鏈發展的核心方向。 隨著主網 Gas 居高不下、TPS 無法滿…