日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用讓 JavaScript 安全且并發的 Web Workers

瀏覽:34日期:2023-11-10 18:30:44

Web Workers 提供了一種在瀏覽器單線程執行外運行 JS 代碼的方式。單線程處理了包括頁面內容展示,通過鍵盤、鼠標點擊和其他裝置的用戶交互,以及對于 AJAX 請求響應的一些請求。

事件處理和 AJAX 請求是異步發生的,可以作為一種通用瀏覽器展示代碼路徑之外的運行代碼的方式,但是它們仍然在這一單線程內運行,并且必須很快完成。

否則,瀏覽器中的交互會失去作用。

Web Workers 允許在一個單獨的線程運行 JS 代碼,完全獨立于瀏覽器線程及其常規活動。

近年來,關于 Web Workers 有什么用的問題有許多爭論。現如今 CPU 的速度非常快,幾乎每個人的個人電腦剛買來打開就擁有幾個 G 的內存。類似地,移動設備也已經達到了臺式機的處理器速度和內存大小。

那些或許曾經被認為是“計算密集型”的應用程序現在被認為沒那么糟糕了。

所謂的 這不是一片空白 是什么意思?

但是很多次當我們決定如何高效地執行代碼時,在開發環境中測試,我們只考慮了一個應用程序的執行。在現實生活系統中,一個用戶的手中會同時執行許多程序。

所以單獨運行的應用或許沒有必要使用 worker 線程,對于大范圍的用戶來說,或許才有必要使用 worker 線程提供最好的體驗。

啟動一個新的 worker 就像是規定一個包含了 JS 代碼的文件一樣簡單:

new Worker(‘worker-script.js’)

一旦創建了 worker ,它便獨立于主瀏覽器線程單獨運行,并執行腳本中賦予它的任何代碼。只是瀏覽器看上去和存放專門腳本文件的 HTML 頁面是有關聯的。

數據是通過 JS 代碼中兩個互補的特性實現在 Workers 和主 Javascript 線程中的傳遞的:

發送端的 postMessage() 方法

接收端的 “message” 事件處理器

message 事件處理器像其他的處理器一樣,接收到一個事件參數,這個事件有一個 “data” 屬性,擁有從另一端傳來的數據。

這個可以成為一個雙向的溝通:在主線程那邊的代碼可以調用 postMessage() 方法發送信息到 worker ,然后 worker 可以使用環境中全局適用的 postMessage() 方法的某種實現將信息返回給主線程。

在 Web Worker 中的一個簡單流程將會是這樣的:在頁面的 HTML 中,一條信息發送到 worker ,然后該頁面等待一個響應:

使用讓 JavaScript 安全且并發的 Web Workers

worker 代碼等待一條信息:

使用讓 JavaScript 安全且并發的 Web Workers

上面的代碼將會在控制臺打印輸出:

Message posted from webworker: Worker runningMessage posted from webworker: Worker received data: {“data”:”123456789'}

Worker 期望為長連接,而無須反復重啟

在 Worker 的生命周期里,瀏覽器與 Worker 會發送與接收多條消息。

Web Worker 的實現從以下兩方面確保了線程安全:

為 Worker 線程創建唯一,相互獨立的全局環境,而與瀏覽器的相隔離

主從線程調用 postMessage() 交換的數據通過拷貝進行

每一個 Worker 線程的全局環境都是有別與瀏覽器頁面的 JavaScript 環境的,并且是唯一的。Worker 不能訪問瀏覽器中的 JavaScript 環境的任何數據,連 DOM、windows 對象、document 對象都不例外。

Worker 有屬于它們自己版本的東西,像將消息記錄到開發人員的控制臺的 ‘console’ 對象,以及發起 AJAX 請求的 XMLHttpRequest 對象。但除此之外,在 Worker 中運行的 Javascript 代碼應該是自包含的;來自于 Worker 線程的任何輸出,主窗口(main window)希望其都必須通過 postMessage() 函數作為數據返回。

此外,任何數據通過 postMessage() 在傳遞之前被復制(傳遞副本),因此在主窗口線程中修改數據并不會導致 Worker 線程中的數據變更。這為 main 線程和 Worker 線程之間傳遞的數據的沖突并發更改提供了固有的保護。

web workers 用例

典型的 web worker 例子就是任何 task 任務在執行過程中可能會變得非常昂貴,要么消耗大量的 CPU 時間,要么花費大量的時鐘時間(計算機調度的時鐘)來訪問數據。

一些可能會用到 web workers 的用例:

預取 和/或 緩存數據供后面使用

輪詢和處理來自web服務器的數據

處理和顯示大數據集(think genomics)

與游戲中的動作有關的計算

圖像處理和過濾

處理文本數據(代碼語法,拼寫檢查,字數計算)

CPU 時間(片)是一個簡單的用例,但是對資源的網絡訪問也很重要。許多時候,網絡上的網絡通信可以以毫秒為單位執行,但有時網絡資源變得不可用,直到網絡恢復或者請求超時(需要1-2分鐘才能清除)。

即使一些代碼在開發環境中被隔離測試時可能不會耗費過長運行時間,但當多個事物可以同時運行時,它可能會成為在用戶環境中運行的問題。

下面的例子演示了 web workers 可用的兩個方法。

Demo:游戲碰撞檢測

(注意:這是一個很長的例子)

現在基于 HTML5 的游戲在網絡瀏覽器中隨處可見。游戲的一個中心方面是游戲環境中各個部分之間的計算運動和交互。有些游戲的移動部分相對較少,而且很容易將其動畫化( 超級馬里奧模擬器 ,還有嗎?)。但是讓我們考慮一個更復雜的例子。

例子涉及到大量的彩色球在矩形邊界上跳躍(反彈)。目標就是讓這些球保持在游戲的邊緣,并且還可以探測球之間的碰撞并使它們彼此反彈。

邊界檢測相對簡單且執行速度快,但是碰撞檢測在計算上的要求就更高了,因為它大致按球的數量的平方數增長:有“n” 個球,每一個球都要和其它球進行比較,看它們的路徑是否相交,是否需要被反彈(結果是 n * n,或者 n 的平方的比較)。

因此有 50 個球,需要進行 2500 次檢查;有 100 個球,需要進行 10000 次檢查(實際上它略少于這個數量的一半:如果你檢查球 n 對球 m,你不需要稍后檢查球 m 對球 n,但是,這里面仍然需要大量的計算)。

來自:https://www.oschina.net/translate/sing-webworkers-for-safe-concurrent-javascript

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
青青国产精品| 成人在线视频免费看| 久久久亚洲一区| 欧美三级精品| 视频一区二区三区入口| 日韩精品视频中文字幕| 麻豆精品一区二区综合av| 亚洲精品**中文毛片| 日韩免费看片| 丝袜诱惑制服诱惑色一区在线观看| 亚洲另类av| 国产精品色婷婷在线观看| 国产福利片在线观看| 欧美天堂亚洲电影院在线观看| 日本一区福利在线| 国产成人精品福利| 香蕉精品999视频一区二区| 国产精品欧美一区二区三区不卡 | 免费在线观看成人| 久久国产精品免费精品3p | 成人精品久久| 国产一区91| 国产精品一区二区三区www| 中文字幕在线看片| 蜜桃一区二区三区在线| 精品视频高潮| 模特精品在线| 免费精品一区| 亚洲日本国产| 日韩免费福利视频| 午夜久久av | 欧美天堂在线| 美女网站视频一区| 丝袜诱惑制服诱惑色一区在线观看| 久久伊人亚洲| 久久午夜精品| 成人国产精品久久| 亚洲一区二区三区高清不卡| 麻豆成人av在线| 丝袜a∨在线一区二区三区不卡| 久久精品国产网站| 亚洲男女av一区二区| 你懂的国产精品| 视频一区二区中文字幕| 国产一区二区三区四区五区传媒| 久久午夜视频| 午夜av成人| 美女精品一区二区| 亚洲一区av| 久久视频一区| 免费日韩一区二区三区| 亚洲欧洲日韩精品在线| 99久久久久久中文字幕一区| 久久av偷拍| 日韩欧美中文字幕电影| 伊人久久成人| 日韩免费视频| 国产精品1区| 亚洲精品伊人| 国产综合欧美| 国产精品伦理久久久久久| 欧美精品影院| 伊人久久亚洲影院| 五月激情久久| 国产一区二区三区国产精品| 青草久久视频| 一区二区三区四区日韩| 日韩中文在线电影| 久久精品国产久精国产| 日韩国产在线不卡视频| 男女性色大片免费观看一区二区 | 日韩高清一级| 婷婷综合五月| 色一区二区三区| 精品久久久亚洲| 国产精品白浆| 亚洲性视频h| 久久精品国内一区二区三区水蜜桃| 久久午夜影院| 麻豆精品视频在线观看视频| 亚洲另类av| 亚洲人妖在线| 丝袜亚洲精品中文字幕一区| 亚洲国内精品| 亚洲国内欧美| 国产一在线精品一区在线观看| 精品久久不卡| 欧美a级一区二区| 国产精品亲子伦av一区二区三区| 国产日本久久| 久久激情五月婷婷| 日韩av中文字幕一区二区三区| 四虎在线精品| 日韩欧美中文字幕一区二区三区| 日韩在线观看一区二区三区| 日韩一区二区三区精品视频第3页| 免费人成在线不卡| 久久电影一区| 亚洲制服少妇| 水野朝阳av一区二区三区| 亚洲深爱激情| 亚洲欧美视频一区二区三区| 欧美午夜不卡影院在线观看完整版免费| 欧美 日韩 国产一区二区在线视频| 天堂中文在线播放| 久久精品影视| 国产在线欧美| 丝袜亚洲另类欧美| 夜夜嗨一区二区三区| 免费av一区| 六月婷婷一区| 亚洲免费福利一区| 奇米777国产一区国产二区| 欧美1区二区| 日韩精品一区第一页| 国产偷自视频区视频一区二区| 日韩欧美不卡| 精品美女久久| 麻豆久久一区| 久久一区精品| 精品一区二区三区中文字幕| 老鸭窝一区二区久久精品| 在线天堂中文资源最新版| 国产99久久| 蜜桃视频免费观看一区| 欧美亚洲tv| 午夜久久中文| 视频一区二区三区在线| 国产一卡不卡| 97视频热人人精品免费| 成人av二区| 色综合视频一区二区三区日韩 | 麻豆传媒一区二区三区| 精品丝袜在线| 免费视频久久| 国产精品久久久久久久久久久久久久久 | 麻豆久久一区二区| 欧美片第1页| 亚洲一区日韩| 国产麻豆精品| 欧美一区二区性| 亚洲一区国产一区| 国产精品久久久久久久久久齐齐| 日韩欧美一区二区三区免费看| 悠悠资源网久久精品| 日韩avvvv在线播放| av资源亚洲| 综合日韩在线| 欧美激情另类| 蜜桃一区二区三区在线| 美女高潮久久久| 不卡在线一区| 国产精品久久久久久久久久妞妞| 精品国模一区二区三区| 综合激情在线| 国产a亚洲精品| 国产农村妇女精品一二区| 国产精品一页| 亚洲女同一区| 久久精品国产久精国产| 亚洲资源av| 精品美女视频| 日本亚洲最大的色成网站www| 日韩欧美看国产| 日韩专区欧美专区| 福利欧美精品在线| 日韩精品视频在线看| 日韩在线第七页| 日韩欧美中文在线观看| 岛国av在线网站| 视频精品一区| 成人福利av| 国产一区 二区| 国产精品外国| 亚洲日本网址| 国产另类在线| 久久午夜影视| 精品三级久久| 久久精品国产久精国产| 亚洲精品三级| 久久理论电影| 久久中文精品| 日韩三级精品| 蜜臀91精品国产高清在线观看| 国产伦乱精品| 视频一区免费在线观看| 日韩视频网站在线观看| 国产精品免费精品自在线观看| 亚洲免费精品| 麻豆成全视频免费观看在线看| 日本伊人久久| 在线综合视频| 麻豆网站免费在线观看| 国产剧情在线观看一区| 日韩制服丝袜av| 亚洲性色视频| 久久久亚洲一区| 色婷婷亚洲mv天堂mv在影片| 欧美色综合网| 综合一区在线|