MIS2000Lab.的「HTML5 認證考試,從零開始」#29-- 使用 Web Workers 處理背景程序

摘要:MIS2000Lab.的「HTML5 認證考試,從零開始」#29-- 使用 Web Workers 處理背景程序





 

 

上一篇文章:MIS2000Lab.的「HTML5 認證考試,從零開始」#28-- Web Socket,實作即時通訊

 

JavaScript在網頁程式上是非常實用又具有威力的工具,但是JavaScript必須在瀏覽器上執行,
也就是說:必須在使用者觀賞網頁並且填寫表單、或是與之互動時才能執行它。

如果您想「定時」自動執行某一段JavaScript那就麻煩了,
除非有個使用者定時啟動瀏覽器來執行這個程式(這樣就不是自動,而是手動執行)。

HTML5提供了新的作法名為Web Workers,可以讓您不用載入就能個別處理背景的執行緒,也可以讓瀏覽器保持可反應的狀態

Web Worker可以讓您執行一個”長程的”非同步任務
並且讓瀏覽器保持可反應的狀態。每一個Web Workers都是一個獨立的執行緒並且在各自分開的環境下運作。

當一個應用程式初始化一個Web Worker而且靠著傳送訊息與它溝通,當然也可以結束他自己創建的Web Worker。

Web Workers有下面幾種工作的情境:
第一,長程執行或是緩慢的I/O運作
第二,執行長時間的運算
第三,在同時運作的執行緒之中區隔工作

下面的範例WebWorker_01.html,網頁可以使用postMessage()函式送出訊息,
靠著message事件可以從Web Worker捕捉(取得)到訊息。

它會讓worker.js(另一個JavaScript程式)在背景反覆地運算執行。


 

  1. <div id="result"></div>  
  2.   
  3. <script>  
  4.     var worker = new Worker('worker.js');  
  5.   
  6.     worker.onmessage = function (event) {  
  7.           document.getElementById('result').textContent = event.data;  
  8.     };  
  9. </script>  
  10.   
  11. //== worker.js的內容 ==========================  
  12. var n = 1;  
  13. search: while (true) {  
  14.     n += 1;  
  15.     for (var i = 2; i <= Math.sqrt(n) ; i += 1)  
  16.         if (n % i == 0)  
  17.             continue search;  
  18.       
  19.     postMessage(n);   // found a prime!找到之後,傳遞給網頁。  
  20. }  

 


==== Web Workers分成兩大類 ====

第一, 專屬(dedicated)Web Workers。
專屬的Web Workers與創建它的網頁有互斥(exclusive、唯一、專屬)屬性。它執行起來是跟網頁「非同步(asynchronous)」方式運作。
唯有創建Dedicated Web Worker的”這一個網頁”才能傳送訊息給Web Worker並且接收它回傳的訊息。當然,這個創建Web Worker的網頁也能結束它。

重點來了!如果創建Dedicated Web Worker的”這個網頁”被關閉、或是結束、或是使用者連結到其他網頁了,

這個網頁啟始的 “所有”Dedicated Web Worker都會停止!

Web Worker也可以強迫中斷自己!
常見的使用情況是:處理一段長期的運算任務,或是上傳一個大檔案、處理大量資料等等。

第二, 分享(shared)Web Workers。
可分享的Web Worker也是由一個網頁來創建以後,但(同一個網站、同一個網頁應用程式裡面的)”其他網頁”可以傳送、接收訊息給”同一個”共享的Web Worker。
Shared Web Workers可以被同一網站內的任何網頁控制它。

除非使用者超連結到「其他網站(外面的網站)」才會停止Shared Web Workers。

舉例來說,網頁購物網站上常見的「購物車」就能使用AJAX方法的Shared Web Workers分享購物車裡面(已採購的)產品資訊,

只要您仍在”同一個”購物網站裡面瀏覽,就能在其他網頁看到您的購物車裡面的採購物品。

下面的示範會先建立一個Shared Web worker,用來傳送、接收訊息。
 

  1. function replyHandler(event) {  
  2. ...  
  3. }  
  4.   
  5. var sharedWebWorker;  
  6. ...  
  7. sharedWebWorker = new SharedWorker("sharedProcessScript.js");  
  8. // 建立一個Shared Web Worker。  
  9.   
  10. sharedWebWorker.port.addEventListener("message", replyHandler, false);  
  11. sharedWebWorker.port.start();  
  12. // 傳送訊息「之前」在這個Port使用.start()。  
  13. ...  
  14. var data = ...;  
  15. sharedWebWorker.port.postMessage(data);  



Shared Web Worker有一個connect事件,每一次有網頁用.start()來開啟一個新的Port就會觸發這個connect事件。
 

  1. function messageHandler(event) {  
  2. // Handle messages received on a port  
  3. ...  
  4. }  
  5.   
  6. function connectHandler(event) {  
  7. var port = event.ports[0];  
  8. port.addEventListener("message" messageHandler, false);  
  9. port.start();  
  10. }  
  11.   
  12. self.addEventListener("connect", connectHandler, false);  



下一篇文章就是三十天的最後一篇了

 

下一篇文章:第一次參加微軟認證考試(如何報名,以Prometric為例) 

 

 

HTML5、CSS、JavaScript 網頁程式設計與 MCSD 70-480 認證教材
9789863475750

HTML5、CSS、JavaScript 網頁程式設計與 MCSD 70-480 認證教材

MIS2000 Lab. 周棟祥/吳進魯

  • 出版商:碁峰
  • 出版日期:2015-04-09
  • 台幣定價:
  • $480
  • 售價:7.9 折 $379
  • 語言:繁體中文
  • ISBN:9863475750
  • ISBN-13:9789863475750

 

 

 

 

**********************************************************************************************************************

我要買書:

PChome  http://24h.pchome.com.tw/books/prod/DJAV0S-A90060ASI

博客來  http://www.books.com.tw/products/0010671214

天瓏書局  https://www.tenlong.com.tw/items/9863475750?item_id=1003110



 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 135hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課