久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      HTML5 Web Worker的介紹(附示例)

      本篇文章給大家?guī)淼膬?nèi)容是關(guān)于HTML5 Web Worker的介紹(附示例),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

      瀏覽器中的Web Worker

      背景介紹

      我們都知道JavaScript這個(gè)語言在執(zhí)行的時(shí)候是采用單線程進(jìn)行執(zhí)行的,也就是說在同一時(shí)間只能做一件事,這也和這門語言有很大的關(guān)系,采用同步執(zhí)行的方式進(jìn)行運(yùn)行,如果出現(xiàn)阻塞,那么后面的代碼將不會(huì)執(zhí)行,HTML5則提出了web Worker標(biāo)準(zhǔn),表示JavaScript允許有多個(gè)線程,但是子線程完全受主線程的控制,子線程不能操作DOM,只有主線程可以操作DOM,所以以主線程為主的單線程執(zhí)行原理成了JavaScript這門語言的核心。

      進(jìn)程與線程的區(qū)別

      根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位。
      在操作系統(tǒng)中能同時(shí)運(yùn)行多個(gè)進(jìn)程(程序);而在同一個(gè)進(jìn)程(程序)中有多個(gè)線程同時(shí)執(zhí)行。

      兼容性

      HTML5 Web Worker的介紹(附示例)

      web worker是什么?

      簡單來說,其實(shí)就是在Javascript單線程執(zhí)行的基礎(chǔ)上,開啟一個(gè)子線程,進(jìn)行程序處理,而不影響主線程的執(zhí)行,當(dāng)子線程執(zhí)行完畢之后再回到主線程上,在這個(gè)過程中并不影響主線程的執(zhí)行過程。

      舉個(gè)栗子

      傳統(tǒng)情況下,執(zhí)行下面的代碼后,整個(gè)頁面都會(huì)被凍結(jié),由于javascript是單線程處理,如下代碼已經(jīng)完全組塞了后續(xù)的執(zhí)行

      while(1){}

      如果換一種方式,我們通過開啟一個(gè)新的線程來執(zhí)行這段代碼,將他放在一個(gè)單獨(dú)的worker.js文件中,在主線程執(zhí)行以下代碼,則可以避免這種情況。

      var worker = new Worker("worker.js")

      Web Worker的用法

      判斷當(dāng)前瀏覽器是否支持web worker

      if (typeof (Worker) != "undefined") { //瀏覽器支持web worker       if (typeof (w) == "undefined") { //w是未定義的,還沒有開始計(jì)數(shù)                 w = new Worker("webworker.js"); //創(chuàng)建一個(gè)Worker對(duì)象,利用Worker的構(gòu)造函數(shù)       }     //onmessage是Worker對(duì)象的properties       w.onmessage = function (event) { //事件處理函數(shù),用來處理后端的web worker傳遞過來的消息           // do something     }; }  else { // 瀏覽器不支持web worker     // do something }

      API

      ①創(chuàng)建新的Worker

      var worker = new Worker("worker.js")

      ②傳遞參數(shù)

      worker.postMessage()

      ③接收消息

      worker.onMessage = function(msg){}

      ④異常處理

      worker.onerror = function(err){}

      ⑤結(jié)束worker

      worker.terminate()

      ⑥載入工具類函數(shù)

      importScripts()

      Worker作用域

      當(dāng)我們創(chuàng)建一個(gè)新的worker時(shí),該代碼會(huì)運(yùn)行在一個(gè)全新的javascript的環(huán)境中(WorkerGlobalScope)運(yùn)行,是完全和創(chuàng)建worker的腳本隔離,這時(shí)我們可以吧創(chuàng)建新worker的腳本叫做主線程,而被創(chuàng)建的新的worker叫做子線程。
      WorkerGlobalScope是worker的全局對(duì)象,所以它包含所有核心javascript全局對(duì)象擁有的屬性如JSON等,window的一些屬性,也擁有類似于XMLHttpRequest()等。
      但是我們所開啟的新的worker也就是子線程,并不支持操作頁面的DOM。

      線程間的通訊是傳值而不是傳地址

      主線程與子線程數(shù)據(jù)通信方式有多種,通信內(nèi)容,可以是文本,也可以是對(duì)象。需要注意的是,這種通信是拷貝關(guān)系,即是傳值而不是地址,子線程對(duì)通信內(nèi)容的修改,不會(huì)影響到主線程。事實(shí)上,瀏覽器內(nèi)部的運(yùn)行機(jī)制是,先將通信內(nèi)容串行化,然后把串行化后的字符串發(fā)給子線程,后者再將它還原。

      JavaScript中的數(shù)據(jù)類型存放原理以及傳遞規(guī)則

      HTML5 Web Worker的介紹(附示例)

      共享線程(SharedWorker)

      共享線程是為了避免線程的重復(fù)創(chuàng)建和銷毀過程,降低了系統(tǒng)性能的消耗,
      共享線程SharedWorker可以同時(shí)有多個(gè)頁面的線程鏈接。
      使用SharedWorker創(chuàng)建共享線程,也需要提供一個(gè)javascript腳本文件的URL地址或Blob,該腳本文件中包含了我們?cè)诰€程中需要執(zhí)行的代碼,如下:

      var worker = new SharedWorker("sharedworker.js");

      共享線程也使用了message事件監(jiān)聽線程消息,但使用SharedWorker對(duì)象的port屬性與線程通信如下:

      worker.port.onmessage = function(msg){};

      同時(shí)我們也可以使用SharedWorker對(duì)象的port屬性向共享線程發(fā)送消息如下:

      worker.port.postMessage(msg);

      運(yùn)行原理

      生命周期

      ①當(dāng)一個(gè)web worker的文檔列表不為空的時(shí)候,這個(gè)web worker會(huì)被稱之為許可線程。
      ②當(dāng)一個(gè)web worker的文檔列表中的任何一個(gè)對(duì)象都是處于完全活動(dòng)狀態(tài)的時(shí)候,這個(gè)web worker會(huì)被稱之為需要激活線程。
      ③當(dāng)一個(gè)web worker是許可線程并且擁有計(jì)數(shù)器或者擁有數(shù)據(jù)庫事務(wù)或者擁有網(wǎng)絡(luò)連接或者它的web worker列表不為空的時(shí)候,這個(gè)web worker會(huì)被稱之為受保護(hù)的線程。
      ④當(dāng)一個(gè)web worker是一個(gè)非需要激活線程同時(shí)又是一個(gè)許可線程的時(shí)候,這個(gè)web worker會(huì)被稱之為可掛起線程。

      以webKit為例加載并執(zhí)行worker的過程

      HTML5 Web Worker的介紹(附示例)

      應(yīng)用

      可以做什么:

      1.可以加載一個(gè)JS進(jìn)行大量的復(fù)雜計(jì)算而不掛起主進(jìn)程,并通過postMessage,onmessage進(jìn)行通信
      2.可以在worker中通過importScripts(url)加載另外的腳本文件
      3.可以使用 setTimeout(), clearTimeout(), setInterval(), and clearInterval()
      4.可以使用XMLHttpRequest來發(fā)送請(qǐng)求
      5.可以訪問navigator的部分屬性

      不可以做什么:

      1.不能跨域加載JS
      2.worker內(nèi)代碼不能訪問DOM
      3.各個(gè)瀏覽器對(duì)Worker的實(shí)現(xiàn)不大一致,例如FF里允許worker中創(chuàng)建新的worker,而Chrome中就不行
      4.不是每個(gè)瀏覽器都支持這個(gè)新特性

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)