Web Worker:讓前端飛起來的隱形引擎

目錄

Web Worker:讓前端飛起來的隱形引擎

一、什么是 Web Worker?

1、為什么需要 web worker

2、什么是 web worker

二、基本使用方法

1、創建一個 Worker 文件(worker.js)

2、主線程引入并使用

三、實戰案例:在前端處理大批量數據

1、Worker 文件(sortWorker.js)

2、主線程調用

四、Vue3 中如何優雅使用 Web Worker

1、新建 Worker 文件(worker.js)

2、在 Vue3 中封裝成 Hook

3、頁面組件中使用

五、注意事項

六、結語


????????CSDN萬粉博主、華為云云享專家、阿里云專家博主、騰訊云、支付寶合作作者,全平臺博客昵稱watermelo37。

? ? ? ? 一個假裝是giser的coder,做不只專注于業務邏輯的前端工程師,Java、Docker、Python、LLM均有涉獵。

---------------------------------------------------------------------

溫柔地對待溫柔的人,包容的三觀就是最大的溫柔。

---------------------------------------------------------------------

Web Worker:讓前端飛起來的隱形引擎

一、什么是 Web Worker?

1、為什么需要 web worker

????????JavaScript 是“單線程”的,就像一個工人(主線程)同時只能做一件事:你讓他“畫頁面”,他就畫;你讓他“算數據”,他就算;你同時讓他畫又讓他算,他會傻住(頁面卡死)。

????????Web Worker 的作用就相當于給 JavaScript 請了多個打工人(Worker)來做那些不需要碰 UI 的任務。

2、什么是 web worker

????????Web Worker 就是瀏覽器為 JavaScript 提供的一種“開小號干活”的機制,幫主線程分擔計算任務,避免卡頓。

????????簡單來說:

Web Worker = 瀏覽器中的子線程。

????????它能讓我們把耗時操作(比如復雜計算、數據處理)丟到后臺執行,主線程只負責 UI 渲染和交互,兩邊互不打擾。

  • Worker 無法直接操作 DOM。

  • Worker 和主線程靠 postMessage 通信。

  • Worker 是完全獨立的執行環境,有自己的全局作用域。

????????總結來說就是能并行執行代碼,不會卡住界面,并且通信機制簡單的機制,常用來解決重CPU運算(算力密集型)的前端任務,比如很久以前有個可以用來計算陰陽師限定條件下最佳的御魂配置的網站,它就需要多線程進行海量數據運算,網頁需要設置計算機的核心數來獲取最快的計算速度,就繞不開使用 Web Worker(或其他實現前端并行計算能力的技術)。

二、基本使用方法

????????來看一個最簡單的 Web Worker 例子。

1、創建一個 Worker 文件(worker.js)

// worker.js
self.onmessage = function(e) {console.log('子線程收到:', e.data);const result = heavyComputation(e.data);self.postMessage(result); // 把結果發回主線程
};function heavyComputation(input) {// 模擬一個超耗時的計算let sum = 0;for (let i = 0; i < 1e9; i++) {sum += input;}return sum;
}

2、主線程引入并使用

const worker = new Worker('worker.js');worker.postMessage(10); // 給子線程發消息worker.onmessage = function(e) {console.log('主線程收到子線程返回:', e.data);
};

????????主線程繼續流暢渲染,不會因為計算被卡住。需注意,worker文件必須是單獨的js文件,且子線程無法操作DOM,只能做純計算或數據處理。

三、實戰案例:在前端處理大批量數據

????????假設你的頁面要處理10萬條數據排序,如果直接在主線程排序,會嚴重卡頓。我們可以用 Worker 來優化。

1、Worker 文件(sortWorker.js)

// sortWorker.js
self.onmessage = function(e) {const sorted = e.data.sort((a, b) => a - b);self.postMessage(sorted);
};

2、主線程調用

const worker = new Worker('sortWorker.js');// 生成10萬條數據
const bigArray = Array.from({ length: 100000 }, () => Math.random() * 100000);worker.postMessage(bigArray);worker.onmessage = (e) => {console.log('排序完成,結果是:', e.data);
};// 同時,頁面可以繼續響應用戶操作,不卡頓!

四、Vue3 中如何優雅使用 Web Worker

????????在 Vue3 項目中,我們可以很自然地用 Worker,比如封裝成組合式函數(Composition API),如下案例,使用體驗和普通函數幾乎一樣,而且完全不卡頁面。

1、新建 Worker 文件(worker.js)

// worker.js
self.onmessage = function(e) {const result = e.data * 2;self.postMessage(result);
};

2、在 Vue3 中封裝成 Hook

// useWorker.js
import { ref, onUnmounted } from 'vue';export function useWorker(workerPath) {const result = ref(null);const worker = new Worker(workerPath);const post = (data) => {worker.postMessage(data);};worker.onmessage = (e) => {result.value = e.data;};onUnmounted(() => {worker.terminate(); // 頁面銷毀時記得關閉 Worker});return { post, result };
}

3、頁面組件中使用

<template><div><button @click="doubleValue">計算2倍</button><p>結果:{{ result }}</p></div>
</template><script setup>
import { useWorker } from './useWorker';const { post, result } = useWorker(new URL('./worker.js', import.meta.url).href);function doubleValue() {post(5); // 給子線程發送 5,子線程返回 10
}
</script>

五、注意事項

????????如果數據特別大,可以用 Transferable Objects 或 SharedArrayBuffer 優化傳輸性能。

注意點說明
DOM 操作Worker 無法操作 DOM。只能處理數據,UI更新要回到主線程。
數據傳輸postMessage 實際上是數據拷貝,所以大對象傳輸有性能損耗。
銷毀使用完記得調用 worker.terminate(),否則會內存泄漏。
同源限制Worker 腳本受同源策略保護。

六、結語

????????Web Worker 是前端多線程開發的基石,提升了復雜應用的性能上限,它的使用非常簡單,通過 postMessage 和 onmessage 雙向通信即可,在實際業務中,如數據處理、音視頻轉碼、大型圖表繪制等場景,Worker 能顯著優化用戶體驗。如果你的項目中存在明顯的主線程卡頓,不妨試試引入 Web Worker,給用戶帶來絲滑流暢的體驗感。

????????只有鍛煉思維才能可持續地解決問題,只有思維才是真正值得學習和分享的核心要素。如果這篇博客能給您帶來一點幫助,麻煩您點個贊支持一下,還可以收藏起來以備不時之需,有疑問和錯誤歡迎在評論區指出~

????????其他熱門文章,請關注:

? ? ? ??極致的靈活度滿足工程美學:用Vue Flow繪制一個完美流程圖

???? ? ?你真的會使用Vue3的onMounted鉤子函數嗎?Vue3中onMounted的用法詳解

????????DeepSeek:全棧開發者視角下的AI革命者

??? ? ??通過array.filter()實現數組的數據篩選、數據清洗和鏈式調用

??? ? ??通過Array.sort() 實現多字段排序、排序穩定性、隨機排序洗牌算法、優化排序性能

??? ? ??TreeSize:免費的磁盤清理與管理神器,解決C盤爆滿的燃眉之急

??? ? ??通過MongoDB Atlas 實現語義搜索與 RAG——邁向AI的搜索機制

???? ? ?深入理解 JavaScript 中的 Array.find() 方法:原理、性能優勢與實用案例詳解

???? ? ?el-table實現動態數據的實時排序,一篇文章講清楚elementui的表格排序功能

?? ? ? ?前端實戰:基于Vue3與免費滿血版DeepSeek實現無限滾動+懶加載+瀑布流模塊及優化策略

??? ? ??MutationObserver詳解+案例——深入理解 JavaScript 中的 MutationObserver

????????JavaScript中通過array.map()實現數據轉換、創建派生數組、異步數據流處理、DOM操作等

????????高效工作流:用Mermaid繪制你的專屬流程圖;如何在Vue3中導入mermaid繪制流程圖

????????干貨含源碼!如何用Java后端操作Docker(命令行篇)

????????在線編程實現!如何在Java后端通過DockerClient操作Docker生成python環境

??? ? ??Dockerfile全面指南:從基礎到進階,掌握容器化構建的核心工具

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

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

相關文章

關于在VScode中使用git的一些步驟常用命令及其常見問題:

輸入 gitee用戶 gitee綁定郵箱git config --global user.name "automated-piggy-senior" git config --global user.email "1323280131qq.com"克隆遠程庫到本地 git clone https://gitee.com/automated-piggy-senior/20250717-test.git常見問題1&#xff1…

LeafletJS 性能優化:處理大數據量地圖

引言 LeafletJS 作為一個輕量、靈活的 JavaScript 地圖庫&#xff0c;以其高效的渲染能力和模塊化設計深受開發者喜愛。然而&#xff0c;當處理大數據量&#xff08;如數千個標記、復雜的 GeoJSON 數據或高分辨率瓦片&#xff09;時&#xff0c;LeafletJS 的性能可能面臨挑戰&…

LLM(Large Language Model)大規模語言模型淺析

參考: https://zhuanlan.zhihu.com/p/7046080918 LLM(Large Language Model)大規模語言模型,是指具有大規模參數和復雜計算結構的機器學習模型。大模型里常說的多少B, B 是 Billion 的縮寫&#xff0c;表示 十億,如DeepSeek滿血版 671B(6710億參數); 大模型本質上是一個使用海量…

【后端】配置SqlSugar ORM框架并添加倉儲

目錄 1.添加包 2.配置連接字符串 3.配置SqlSugar 3.1.添加基礎類 3.2.添加方法 3.2.1.讀取配置方法 3.2.2.枚舉擴展方法 3.3.添加管理類&#xff08;重要&#xff09; 4.配置倉儲 4.1.倉儲接口添加 5.注冊 6.使用 該文檔是配置SqlSugar多租戶和加倉儲教程。使用 S…

全國高等院校計算機基礎教育研究會2025學術年會在西寧成功舉辦 ——高原論道啟新程,數智融合育英才

7 月16日至18日&#xff0c;全國高等院校計算機基礎教育研究會2025學術年會在青海西寧隆重召開。大會以“數智融合&#xff0c;創新計算機教育”為主題&#xff0c;匯聚人工智能領域頂尖專家學者、高校校長、產業翹楚及一線教師300 多人&#xff0c;共商人工智能時代計算機基礎…

AppTrace:重新定義免填邀請碼,解鎖用戶裂變新高度

??在移動互聯網時代&#xff0c;?用戶裂變是App增長的核心引擎&#xff0c;而邀請機制則是裂變的關鍵驅動力。然而&#xff0c;傳統的邀請碼機制——依賴用戶手動輸入、記憶復雜字符——已經成為用戶體驗的絆腳石&#xff0c;導致轉化率下降、運營成本上升。?AppTrace? 作…

神經網絡常見激活函數 13-Softplus函數

文章目錄Softplus函數導函數函數和導函數圖像優缺點PyTorch 中的 Softplus 函數TensorFlow 中的 Softplus 函數Softplus 函數導函數 Softplus函數 Softplus?(x)ln?(1ex)\begin{aligned} \operatorname{Softplus}(x) & \ln \bigl(1 e^{\,x}\bigr) \end{aligned} Softplu…

深度理解 KVM:Linux 內核系統學習的重要角度

&#x1f4d6; 推薦閱讀&#xff1a;《Yocto項目實戰教程:高效定制嵌入式Linux系統》 &#x1f3a5; 更多學習視頻請關注 B 站&#xff1a;嵌入式Jerry 深度理解 KVM&#xff1a;Linux 內核系統學習的重要角度 作者&#xff1a;嵌入式 Jerry 一、為什么開發者需要學習 KVM&…

閉包的定義和應用場景

一、閉包是什么&#xff1f; 閉包是指函數可以“記住”并訪問它定義時的詞法作用域&#xff0c;即使這個函數在其作用域鏈之外執行。 簡單說&#xff1a;函數 A 在函數 B 中被定義&#xff0c;并在函數 B 外部被調用&#xff0c;它依然能訪問函數 B 中的變量&#xff0c;這就是…

北京-4年功能測試2年空窗-報培訓班學測開-第五十四天

今天交付的成果是&#xff0c;初版簡歷雖然只寫了項目部分&#xff0c;但用了一整天&#xff0c;期間聯系了前司組長&#xff0c;拿到了性能測試報告。然后再看壓測腳本&#xff0c;突然能看懂了&#xff0c;對服務端日志也能看懂些了&#xff0c;還找到了客戶端日志怎么說呢&a…

算法訓練營day24 回溯算法③ 93.復原IP地址 、78.子集、 90.子集II

今天繼續回溯算法的專題&#xff0c;第三篇博客&#xff01; 93.復原IP地址 輸入&#xff1a;s "25525511135" 輸出&#xff1a;["255.255.11.135","255.255.111.35"] 切割字符串為4段&#xff0c;當進行到第四段的時候對第四段字符串進行判斷…

jeccg-boot框架實現xls模板導出功能

文章目錄一、后端部分二、前端部分三、模板制作一、后端部分 //1、在application-dev.yml文件增加模板路徑path :#模板路徑saxls: /data/opt/saxls/ //2、控制層寫法 public class sabassalController extends JeecgController<sabassalVo, IsabassalService> {Autowired…

LangChain4j入門:Java開發者的AI應用開發指南

&#x1f680; 在AI浪潮席卷全球的今天&#xff0c;Java開發者如何快速上手大語言模型應用開發&#xff1f;LangChain4j為我們提供了完美的解決方案&#xff01; 前言&#xff1a;為什么Java開發者需要LangChain4j&#xff1f; 想象一下&#xff0c;你正在開發一個企業級應用&…

相機光學(五十)——Depth AF

1.什么是Depth AFDepth AF&#xff08;景深自動對焦&#xff09;&#xff0c;也稱為 Depth-of-Field AF&#xff08;景深對焦&#xff09; 或 DEP AF&#xff0c;是一種基于景深范圍的自動對焦技術&#xff0c;核心目標是&#xff1a;確保從前景到背景的一整段距離都在清晰景深…

Unity 堆棧分析實戰指南 C#

Unity 堆棧分析實戰指南 提示&#xff1a;內容純個人編寫&#xff0c;歡迎評論點贊&#xff0c;來指正我。 文章目錄Unity 堆棧分析實戰指南1. 前言2. 什么是堆棧3. Unity 中的堆棧4. 堆棧分析工具5. 如何進行堆棧分析6. 實戰案例分析案例 1: 性能瓶頸分析案例 2: 內存泄漏檢測…

AE MDX L6 L12 L18 電源手側操作使用說明

AE MDX L6 L12 L18 電源手側操作使用說明

Gemini Function Calling 和 Qwen3 Embedding和ReRanker模型

Gemini API 的函數調用&#xff08;Function Calling&#xff09;功能。它解決了傳統大語言模型&#xff08;LLM&#xff09;的一個關鍵局限&#xff1a;LLM 本身是基于訓練數據的“知識庫”&#xff0c;擅長生成文本和回答問題&#xff0c;但無法直接執行代碼、訪問實時數據或…

??VMware Workstation Pro 17.5.0 安裝教程 - 詳細步驟圖解(附下載+激活)?

VMware Workstation Pro 17.5.0 是一款功能強大的虛擬機軟件&#xff0c;允許用戶在一臺計算機上同時運行多個操作系統&#xff08;如 Windows、Linux、macOS&#xff09;&#xff0c;適用于開發、測試、運維及學習環境搭建。本教程提供 ??詳細安裝步驟??&#xff0c;包括 …

端到端神經網絡視頻編解碼器介紹

一、技術演進&#xff1a;從模塊優化到全局智能的范式躍遷 傳統編解碼器的效率天花板&#xff08;1990-2017&#xff09; 架構局限&#xff1a;H.264/HEVC依賴手工設計的運動估計、DCT變換、熵編碼模塊&#xff0c;各模塊獨立優化導致全局效率損失。高分辨率瓶頸&#xff1a;4…

Kubernetes (k8s)環境重啟Pod方式總結

前言&#xff1a;在 Kubernetes (k8s) 中&#xff0c;沒有直接的命令如 kubectl restart pod 來重啟 Pod&#xff0c;因為 Pod 的生命周期由控制器&#xff08;如 Deployments、StatefulSets 或 ReplicaSets&#xff09;管理。重啟操作本質上是通過刪除并重建 Pod 來實現的&…