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

您的位置:首頁技術(shù)文章
文章詳情頁

使用讓 JavaScript 安全且并發(fā)的 Web Workers

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

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

事件處理和 AJAX 請求是異步發(fā)生的,可以作為一種通用瀏覽器展示代碼路徑之外的運(yùn)行代碼的方式,但是它們?nèi)匀辉谶@一單線程內(nèi)運(yùn)行,并且必須很快完成。

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

Web Workers 允許在一個單獨(dú)的線程運(yùn)行 JS 代碼,完全獨(dú)立于瀏覽器線程及其常規(guī)活動。

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

那些或許曾經(jīng)被認(rèn)為是“計(jì)算密集型”的應(yīng)用程序現(xiàn)在被認(rèn)為沒那么糟糕了。

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

但是很多次當(dāng)我們決定如何高效地執(zhí)行代碼時,在開發(fā)環(huán)境中測試,我們只考慮了一個應(yīng)用程序的執(zhí)行。在現(xiàn)實(shí)生活系統(tǒng)中,一個用戶的手中會同時執(zhí)行許多程序。

所以單獨(dú)運(yùn)行的應(yīng)用或許沒有必要使用 worker 線程,對于大范圍的用戶來說,或許才有必要使用 worker 線程提供最好的體驗(yàn)。

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

new Worker(‘worker-script.js’)

一旦創(chuàng)建了 worker ,它便獨(dú)立于主瀏覽器線程單獨(dú)運(yùn)行,并執(zhí)行腳本中賦予它的任何代碼。只是瀏覽器看上去和存放專門腳本文件的 HTML 頁面是有關(guān)聯(lián)的。

數(shù)據(jù)是通過 JS 代碼中兩個互補(bǔ)的特性實(shí)現(xiàn)在 Workers 和主 Javascript 線程中的傳遞的:

發(fā)送端的 postMessage() 方法

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

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

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

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

使用讓 JavaScript 安全且并發(fā)的 Web Workers

worker 代碼等待一條信息:

使用讓 JavaScript 安全且并發(fā)的 Web Workers

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

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

Worker 期望為長連接,而無須反復(fù)重啟

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

Web Worker 的實(shí)現(xiàn)從以下兩方面確保了線程安全:

為 Worker 線程創(chuàng)建唯一,相互獨(dú)立的全局環(huán)境,而與瀏覽器的相隔離

主從線程調(diào)用 postMessage() 交換的數(shù)據(jù)通過拷貝進(jìn)行

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

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

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

web workers 用例

典型的 web worker 例子就是任何 task 任務(wù)在執(zhí)行過程中可能會變得非常昂貴,要么消耗大量的 CPU 時間,要么花費(fèi)大量的時鐘時間(計(jì)算機(jī)調(diào)度的時鐘)來訪問數(shù)據(jù)。

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

預(yù)取 和/或 緩存數(shù)據(jù)供后面使用

輪詢和處理來自web服務(wù)器的數(shù)據(jù)

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

與游戲中的動作有關(guān)的計(jì)算

圖像處理和過濾

處理文本數(shù)據(jù)(代碼語法,拼寫檢查,字?jǐn)?shù)計(jì)算)

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

即使一些代碼在開發(fā)環(huán)境中被隔離測試時可能不會耗費(fèi)過長運(yùn)行時間,但當(dāng)多個事物可以同時運(yùn)行時,它可能會成為在用戶環(huán)境中運(yùn)行的問題。

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

Demo:游戲碰撞檢測

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

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

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

邊界檢測相對簡單且執(zhí)行速度快,但是碰撞檢測在計(jì)算上的要求就更高了,因?yàn)樗笾掳辞虻臄?shù)量的平方數(shù)增長:有“n” 個球,每一個球都要和其它球進(jìn)行比較,看它們的路徑是否相交,是否需要被反彈(結(jié)果是 n * n,或者 n 的平方的比較)。

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

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产a久久精品一区二区三区| 日韩福利视频导航| 国产精品中文字幕制服诱惑| 国产精品一区二区中文字幕| 国产精品红桃| 国产精品高颜值在线观看| 欧美日韩国产v| 国产一区国产二区国产三区 | 麻豆精品久久| 国内自拍视频一区二区三区| 亚洲精品在线影院| 免费毛片在线不卡| 亚洲视频国产| 麻豆中文一区二区| 欧美福利在线| 欧美视频久久| 日韩欧美一区二区三区免费看| 婷婷激情图片久久| 日本成人在线视频网站| 国产精品中文字幕亚洲欧美| 日韩在线二区| 蜜臀久久99精品久久久画质超高清| 91亚洲精品在看在线观看高清| 精品视频自拍| 国产亚洲精品久久久久婷婷瑜伽| 久久成人国产| 日韩视频二区| 亚洲精品日韩久久| 国产成人久久精品麻豆二区 | 欧美美女一区| 羞羞答答国产精品www一本| 日韩高清成人在线| 日韩不卡视频在线观看| 日本亚洲视频在线| 日韩高清中文字幕一区二区| 天堂av一区| 久久国产成人午夜av影院宅| 日韩精品一区二区三区中文 | 欧美激情日韩| 欧美美女一区| 日韩免费精品| 日韩另类视频| 69堂免费精品视频在线播放| 午夜精品成人av| 亚洲区欧美区| 久久不卡日韩美女| 亚洲一区黄色| sm捆绑调教国产免费网站在线观看| 亚洲精品123区| 久久精品五月| 蜜桃av一区二区三区电影| 国产一区二区三区四区五区传媒| 免费视频久久| 久久久久久一区二区| 蜜桃久久精品一区二区| 久久精品毛片| 亚洲男人在线| 国产综合精品一区| 动漫av一区| 日韩av一区二区三区四区| 午夜日韩福利| 欧产日产国产精品视频| 麻豆国产一区| 青青草国产成人99久久| 91久久中文| 日韩大片在线观看| 久久久久久亚洲精品美女| 欧美永久精品| 日韩欧美中文字幕在线视频| 尹人成人综合网| 精品三级在线| 久久国产日韩欧美精品| 日韩在线观看一区二区| 国产在线不卡| 日本精品不卡| 国产成人精选| 精品国产不卡一区二区| 欧美精品二区| 欧美伊人久久| 911精品国产| 91九色综合| 日韩精品视频一区二区三区| 蜜桃av一区二区| 日韩中文字幕亚洲一区二区va在线 | 女生影院久久| 欧美激情麻豆| 欧美日韩亚洲一区三区| 亚洲色图国产| 亚洲精品观看| 日本成人中文字幕在线视频| 伊人久久亚洲美女图片| 香蕉人人精品| 午夜精品免费| 久久亚洲风情| 日韩有吗在线观看| 日韩精品第一| 久久国产精品色av免费看| 欧美精品一线| 性色一区二区| 亚洲欧美日本国产| 日本欧美一区| 久久99蜜桃| 日韩在线短视频| 五月天久久久| 亚洲精品美女91| 国产精品一区二区av交换| 精品亚洲自拍| 久久九九精品| 爽好多水快深点欧美视频| 日本不卡不码高清免费观看| 欧美日韩夜夜| 激情黄产视频在线免费观看| 久久99国产精品视频| 国产欧洲在线| 欧美福利在线| 一区二区三区网站| 国产丝袜一区| 精品视频91| 久久久噜噜噜| 天堂av在线一区| 欧美色综合网| 高清av一区| 亚洲一级在线| 国产精品一站二站| 国产精品字幕| 蜜臀精品久久久久久蜜臀| 欧美日韩一区自拍| 国产精品永久| 999久久久精品国产| 亚洲欧美视频| 国产精品a级| 欧美日韩激情| 国产精品麻豆成人av电影艾秋| 亚洲精品成人图区| 久久国产精品亚洲77777| 国产精品美女在线观看直播| 热三久草你在线| 亚洲午夜国产成人| 精品国产欧美日韩| 亚洲在线国产日韩欧美| 欧美激情日韩| 久久久9色精品国产一区二区三区| 婷婷综合激情| 欧美精品第一区| 亚洲自啪免费| 福利一区二区免费视频| 久久午夜视频| 成人在线视频免费| 蜜桃久久av一区| 成年男女免费视频网站不卡| 日av在线不卡| 欧美aa在线观看| 日韩精品一区二区三区中文| 亚洲播播91| 国产欧美日韩精品一区二区三区| 日韩国产一区| 国产精品一国产精品| 久久永久免费| 视频一区二区不卡| 牛牛精品成人免费视频| 亚洲欧洲另类| 欧美激情另类| 国产一区二区三区四区五区| 亚洲午夜91| 国产精品久久乐| 欧美特黄一区| 精品少妇一区| 亚洲精品乱码日韩| 欧美成人高清| 成人国产精品一区二区免费麻豆| 亚洲欧美日韩视频二区| 色欧美自拍视频| 激情综合网五月| 国产精品tv| 日本不卡视频在线| 亚洲一区国产| 丝袜av一区| 卡一卡二国产精品| 伊人久久大香伊蕉在人线观看热v| 欧美国产一级| 国产精品丝袜在线播放| 亚洲精品婷婷| 99热精品在线| 91精品国产自产在线观看永久∴ | 国产精品久久乐| 亚洲欧美日韩综合国产aⅴ| 日韩av不卡在线观看| 一区二区视频欧美| 美腿丝袜亚洲一区| 国产韩日影视精品| 日韩欧美一区二区三区免费观看| 卡一卡二国产精品| 国产精品久一| 日韩av中文字幕一区| 老牛国产精品一区的观看方式| 久久精品官网| 日本不卡免费高清视频在线| 精品视频一区二区三区四区五区| 国产毛片久久久| 亚洲综合婷婷|