Vue3 + Vite + TS,使用 Web Worker,web worker進階 hooks

worker 具體通訊方式

1.由 web page 發送消息- worker.postMessage(發送數據)
2.web worker 接收消息并執行相關邏輯- onmessage = (e) => { 接收數據并處理邏輯postMessage(傳遞處理后的數據)}
3.由 web page 監聽 worker 消息,包括:- 處理數據的監聽worker.onmessage = (得到處理的數據)=> {}- 執行中報錯監聽worker.onerror = (報錯信息) => {}

Web Workers API 傳送門

添加web worker - worker.ts

// 文件存儲位置沒具體固定,作者放在src/
onmessage = (e) => {console.log('發送來的數據'+e)postMessage(e)
}

引入、通信、監聽報錯、銷毀

import MyWorker from '@/workers/index?worker'
const worker = new MyWorker()
// 向 Web Worker 發送數據
worker.postMessage({ type:'search2' })
//監聽 Web Worker 返回的數據,并銷毀
worker.onmessage = async (e) => {worker.terminate()console.log('接收數據'+e)
}
// 監聽報錯
worker.onerror = (err) => {console.error('Worker error:', err)worker.terminate()
}

new Blob

// 將一個函數轉換為 blob,然后為這個 blob 生成 URL 對象
function fn2workerURL(fn) {const blob = new Blob([`(${fn.toString()})()`], { type: "text/javascript" });return URL.createObjectURL(blob);
}

new Worker

// 指定一個腳本的 URI 來執行 worker 線程
const myWorker = new Worker("worker文件URL");

進階 web worker hooks

// 創建一個Web Worker實例
const createWorker = (workerScript: Function) => {const blob = new Blob(["(" + workerScript.toString() + ")()"], { type: "text/javascript" });const url = window.URL.createObjectURL(blob);return new Worker(url);
};
function useWebWorker(workerScript: Function) {const worker = ref(createWorker(workerScript));const message = ref(null);const error = ref<ErrorEvent | null>(null);worker.value.onmessage = (e) => {message.value = e.data;error.value = null;};worker.value.onerror = (e) => {message.value = null;error.value = e;};const postMessage = (msg: string | object) => worker.value.postMessage(msg);onUnmounted(() => worker.value.terminate());return { postMessage, message, error };
}
export default useWebWorker;

進階 web worker 引入、使用

import useWebWorker from '@/hooks/webWorker'
// 設定 web worker 接收數據函數
const workerScript = function() {self.onmessage = function(e) {console.log('Worker received:99 ' + e.data)self.postMessage('Worker received: ' + e.data); };
};
// 獲取 hooks 的數據
const { postMessage, message, error } = useWebWorker(workerScript);
postMessage(發送數據)

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

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

相關文章

AIDD-人工智能藥物設計-AI 精準預測蛋白質變構位點

Allo-PED: AI 精準預測蛋白質變構位點 目錄 Allo-PED 框架融合蛋白質語言模型與結構特征,顯著提高了變構位點預測的準確性和泛化能力。EcoFoldDB 利用蛋白質結構信息,為宏基因組提供了精確且可擴展的生態功能注釋新方法,顯著提升了對未知微生物功能的認知。上下文分子適配(…

1558 找素數

1558 找素數 ??難度&#xff1a;中等 &#x1f31f;考點&#xff1a;質數 &#x1f4d6; &#x1f4da; import java.util.Scanner; import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.…

Nacos 提供了哪些服務的保護機制?

當面試官問這個問題時&#xff0c;大家一定要保持頭腦清醒&#xff0c;不要被帶跑偏了&#xff0c;Nacos 本身的核心定位是服務發現和配置管理中心&#xff0c;它并不直接提供像服務熔斷、服務限流、服務降級、請求重試 這類完整的、開箱即用的客戶端/網關級服務保護&#xff0…

【家政平臺開發(38)】解鎖家政平臺國際化密碼:多語言支持開發實戰

> 本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質…

DirectX12 - 基本知識 - 圖形驅動的本質

這里是SunshineBooming&#xff0c;GPU公司一枚小小的Driver工程師&#xff0c;主要工作是寫DirectX12 Driver&#xff0c;我會持續更新這個DX12 Spec系列&#xff0c;可能比較冷門&#xff0c;但是都是干貨和工作中的心得體會&#xff0c;有任何GPU相關的問題都可以在評論區互…

selenium元素獲取

from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome()driver.maximize_window()#最大化窗口 #隱式等待 driver.implicitly_wait(10)#打開網頁 driver.get("https://www.zhipin.com/beijing/?kacity-sites-101010100&q…

生物化學筆記:醫學免疫學原理15 超敏反應過敏反應(I型[蚊蟲叮咬]+II型[新生兒溶血癥、突眼型甲亢]+III型+IV型)

超敏反應 每個人都可能發生的過敏問題&#xff1a;被蚊子咬后起包 I型超敏反應 II型超敏反應 新生兒溶血癥分為Rh血型不合和ABO血型不合兩種情況。Rh血型不合通常從第二胎開始更容易發病&#xff0c;因為母體初次接觸Rh陽性胎兒的紅細胞后會產生抗D抗體&#xff0c;而這個致敏…

【android bluetooth 框架分析 02】【Module詳解 2】【gd_shim_module 模塊介紹】

1. 背景 上一章節 我們介紹了 module_t 的 大體框架 &#xff0c;本節內容我們就選擇 我們的 gd_shim_module 模塊為例子&#xff0c;具體剖析一下&#xff0c;它里面的邏輯。 static const char GD_SHIM_MODULE[] "gd_shim_module";// system/main/shim/shim.cc …

【包管理器】主流包管理器_對比_應用場景

不定期更新&#xff0c;建議關注收藏點贊。 鏈接&#xff1a; npm專題 目錄 主流包管理器簡介對比 主流包管理器簡介 主流的包管理器其實有不少&#xff0c;不同語言和平臺都有各自的一套系統。 前端&#xff08;JavaScript/TypeScript&#xff09; 名稱簡介開發者特點npmNo…

參照Spring Boot后端框架實現序列化工具類

本文參照Jackson實現序列化工具類&#xff0c;旨在于簡化開發 JacksonUtil.class public class JacksonUtil {private JacksonUtil() {}/*** 單例*/private final static ObjectMapper OBJECT_MAPPER;static {OBJECT_MAPPER new ObjectMapper();}private static ObjectMappe…

Rust入門之迭代器(Iterators)

Rust入門之迭代器&#xff08;Iterators&#xff09; 本文已同步本人博客網站 本文相關源碼已上傳Github 前言 迭代器&#xff08;Iterators&#xff09;是 Rust 中最核心的工具之一&#xff0c;它不僅是遍歷集合的抽象&#xff0c;更是 Rust 零成本抽象&#xff08;Zero-Co…

若依框架二次開發——RuoYi-AI 本地部署流程

文章目錄 項目環境安裝后端1. 下載項目2. 使用 IDEA 導入項目3. 配置 Maven4. 配置 Maven settings.xml5. 初始化數據庫6. 啟動 Redis7. 修改數據庫配置8. 啟動后端服務安裝管理端1. 下載管理端項目2. 安裝依賴3. 啟動管理端4. 修改管理端配置安裝用戶端1. 下載用戶端項目2. 安…

精品推薦-最新大模型MCP核心架構及最佳實踐資料合集(18份).zip

精品推薦-最新大模型MCP核心架構及最佳實踐資料合集&#xff0c;共18份。 1、2025年程序員必學技能&#xff1a;大模型MCP核心技術.pdf 2、MCP 架構設計剖析&#xff1a;從 Service Mesh 演進到 Agentic Mesh.pdf 3、MCP 架構設計深度剖析&#xff1a;使用 Spring AI MCP 四步…

DataWorks智能體Agent發布!基于MCP實現數據開發與治理自動化運行

在傳統的數據開發工作中&#xff0c;企業用戶或者開發者常常需要進行繁瑣的配置、復雜的代碼撰寫、反復的性能調優和大量重復性的操作&#xff0c;才能實現數據開發、數據集成和數據治理等工作&#xff0c;效率十分低下。 近日&#xff0c;阿里云大數據開發治理平臺DataWorks基…

IDEA 中右側沒有顯示Maven

IDEA 中右側沒有顯示Maven 1. 檢查 Maven 項目是否正確加載 現象 ? 項目是 Maven 項目&#xff0c;但右側沒有 Maven 工具窗口。 ? 項目根目錄下有 pom.xml&#xff0c;但 IDEA 沒有識別為 Maven 項目。 解決方法 手動重新加載 Maven 項目&#xff1a; ? 在 IDEA 中&…

羅技K860鍵盤

羅技藍牙鍵盤的頂部功能鍵F1-F12的原本功能 單擊羅技鍵盤的功能鍵時&#xff0c;默認響應的是鍵盤上面顯示的快進、調節音量等功能。改變回F1~F12原本功能&#xff0c;同時按下 fn和esc組合鍵

什么是大型語言模型(LLM)?哪個大模型更好用?

什么是 LLM&#xff1f; ChatGPT 是一種大型語言模型 (LLM)&#xff0c;您可能對此并不陌生。它以非凡的能力而聞名&#xff0c;已證明能夠出色地完成各種任務&#xff0c;例如通過考試、生成產品內容、解決問題&#xff0c;甚至在最少的輸入提示下編寫程序。 他們的實力現已…

css畫右上角 角標三角形

.corner {position: absolute;top: -2rem;right: -2rem;width: 0;height: 0;border: 2rem solid red;border-bottom-color: transparent;border-top-color: transparent;border-left-color: transparent;transform: rotateZ(135deg); } 基本思路就是設置border&#xff0c;只設…

vue自定義顏色選擇器

vue自定義顏色選擇器 效果圖&#xff1a; step0: 默認寫法 調用系統自帶的顏色選擇器 <input type"color">step1:C:\Users\wangrusheng\PycharmProjects\untitled18\src\views\Home.vue <template><div class"container"><!-- 顏…

[Python] 企業內部應用接入釘釘登錄,端內免登錄+瀏覽器授權登錄

[Python] 為企業網站應用接入釘釘鑒權&#xff0c;實現釘釘客戶端內自動免登授權&#xff0c;瀏覽器中手動釘釘授權登錄兩種邏輯。 操作步驟 企業內部獲得 開發者權限&#xff0c;沒有的話先申請。 訪問 釘釘開放平臺-應用開發 創建一個 企業內部應用-釘釘應用。 打開應用…