<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 介紹 通過使用Web Worker, 我們可以在瀏覽器后臺運行JavaScript, 而不占用瀏覽器自身線程。Web Worker可以提高應用的總體性能,并且提升用戶體驗。如果你想在自己的Web應用中使用Web Worker, 不妨來了解一下有關Web Worker的7件事。 #### 1. Web Worker 可以讓你在后臺運行Javascript 一般來說Javascript和頁面的UI會共用一個線程,所以當點擊一個按鈕開始運行Javascript后,在這段代碼運行完畢之前,頁面是無法響應用戶操作的,換句話來說就是被“凍結”了。而這段代碼可以交給Web Worker在后臺運行,那么頁面在Javascript運行期間依然可以響應用戶操作。后臺會啟動一個worker線程來執行這段代碼,用戶可以創建多個worker線程。所以你可以在前臺做一些小規模分布式計算之類的工作,不過Web Worker有以下一些使用限制: * Web Worker無法訪問DOM節點; * Web Worker無法訪問全局變量或是全局函數; * Web Worker無法調用alert()或者confirm之類的函數; * Web Worker無法訪問window、document之類的瀏覽器全局變量; 不過Web Worker中的Javascript依然可以使用setTimeout(),setInterval()之類的函數,也可以使用XMLHttpRequest對象來做Ajax通信。 #### 2. 有兩種Web Worker Web workers可分為兩種類型:專用線程dedicated web worker,以及共享線程shared web worker。 Dedicated web worker隨當前頁面的關閉而結束;這意味著Dedicated web worker只能被創建它的頁面訪問。與之相對應的Shared web worker可以被多個頁面訪問。在Javascript代碼中,“Work”類型代表Dedicated web worker,而“SharedWorker”類型代表Shared web worker。 在絕大多數情況下,使用Dedicated web worker就足夠了,因為一般來說在web worker中運行的代碼是專為當前頁面服務的。而在一些特定情況下,web worker可能運行的是更為普遍性的代碼,可以為多個頁面服務。在這種情況下,我們會創建一個共享線程的 Shared web worker,它可以被與之相關聯的多個頁面訪問,只有當所有關聯的的頁面都關閉的時候,該 Shared web worker 才會結束。相對Dedicated web worker,shared web worker稍微復雜些。 #### 3. “Worker”對象代表Dedicated Web Worker 現在來看如何使用Dedicated web worker。 下面的例子中用到了jQuery以及Modernizr作為Javascript庫,然后往HTML頁面中加入以下代碼: ~~~ <!DOCTYPE html> <html> <head> <title></title> <script type="text/javascript" src="script/modernizr.js"></script> <script type="text/javascript" src="script/jquery-2.0.0.js"></script> <script type="text/javascript"> $(document).ready(function(){ if(!Modernizr.webworker){ alert("This browser doesn't support Web Worker!"); return; } $("#btnStart").click(function(){ var worker = new Worker("script/lengthytask.js"); worker.addEventListener("message", function(evt){ alert(evt.data); }, false); worker.postMessage(10000) }); }); </script> </head> <body> <form> <input type="button" id="btnStart" value="Start Processing"/> </form> </body> </html> ~~~ 這個HTML頁面中有個按鈕,點擊后會運行一個Javascript文件。上面的代碼中首先檢測當前瀏覽器是否支持Web Worker,不支持的話,就跳出提醒信息。 按鈕的點擊事件中創建了Worker對象,并給它指定了Javascript腳本文件——lengthytask.js(稍后會有代碼),并且給Worker對象綁定了一個“message”事件。該事件會在后臺代碼(lengthytask.js)向頁面返回數據時觸發。 “message”事件可以通過event.data來獲取后臺代碼傳回的數據。最后,postMessage方法正式執行lengthytask.js,該方法還可以向后臺代碼傳遞參數, 后臺代碼同樣通過message事件獲取該參數。 下面是lengthytask.js主要包含的代碼: ~~~ addEventListener("message", function(evt){ var date = new Date(); var currentDate = null; do { currentDate = new Date(); }while(currentDate - date < evt.data); postMessage(currentDate); }, false); ~~~ 以上代碼在后臺監聽message時間,并獲取頁面傳來的參數:10000;這里實際上是一個計時函數:在message事件被觸發10000毫秒之后,把結果(currentDate)傳給頁面。 所以當點擊“Start Processing”按鈕,頁面會在10秒鐘后把當時的時刻alert出來。在這10秒鐘內頁面依然可以響應鼠標鍵盤事件。 #### 4. “SharedWorker”對象代表Shared Web Worker 前面的代碼使用的是dedicated web worker。 這一節會用shared web worker代替dedicated web worker,來區別兩者的不同。下面是同一個例子的shared web worker版本: * * * * * 1. 原文:http://www.developer.com/lang/jscript/7-things-you-need-to-know-about-web-workers.html 2. 譯者: Rock(ruanqig@gmail.com) 3. 譯文:http://blog.csdn.net/dojotoolkit/article/details/25030289
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看