【愚公系列】2022年02月 微信小程序-app.json配置屬性之Worker
一、app.json配置屬性之Worker

我們知道js是單線程的,在有時候需要處理一些密集計算或者是高延遲的時候,總會出現不便。而且,現在的cpu都是多核的,單線程也無法充分發揮電腦的計算能力。正是基于這種情況,才有了worker的誕生。
一些異步處理的任務,可以放置于 Worker 中運行,待運行結束后,再把結果返回到小程序主線程。Worker 運行于一個單獨的全局上下文與線程中,不能直接調用主線程的方法。
Worker 與主線程之間的數據傳輸,雙方使用 Worker.postMessage() 來發送數據,Worker.onMessage() 來接收數據,傳輸的數據并不是直接共享,而是被復制的。
二、配置
1.app.json
在app.json中配置worker目錄
{ "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle": "black" }, "workers": "workers", "sitemapLocation": "sitemap.json" }
如下圖:
2.子線程
// myworker.js worker.onMessage(function(res){ console.log('這是worker內部線程打印的') console.log(res) let sum = add(res.x,res.y); worker.postMessage({ sum : sum }) }); function add(x,y){ return x+y; }
3.主線程
onLoad: function (options) { const worker = wx.createWorker('/workers/request/index.js'); worker.postMessage({ x : 10, y : 2 }); worker.onMessage(function(res){ console.log('這是主線程打印的') console.log(res) }); },
4.監聽回收事件
function createNewWorker() { const worker = wx.createWorker('workers/request/index.js', { useExperimentalWorker: true }) // 監聽worker被系統回收事件 worker.onProcessKilled(() => { // 重新創建一個worker createNewWorker() }) } // 創建實驗worker createNewWorker()
5. 注意事項
Worker 最大并發數量限制為 1 個,創建下一個前請用 Worker.terminate() 結束當前 Worker
Worker 內代碼只能 require 指定 Worker 路徑內的文件,無法引用其它路徑
Worker 的入口文件由 wx.createWorker() 時指定,開發者可動態指定Worker 入口文件
Worker 內不支持 wx 系列的 API
Workers 之間不支持發送消息
Worker 目錄內只支持放置 JS 文件,其他類型的靜態文件需要放在 Worker 目錄外
基礎庫 v2.18.1 開始支持在插件內使用 worker。相應地,插件使用worker前需要在plugin.json內配置workers代碼路徑,即一個相對插件代碼包根目錄的路徑。
javaScript JSON 移動APP
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。