首頁  >  文章  >  web前端  >  HTML5 Web Workers之網站也能多執行緒的實作_html5教學技巧

HTML5 Web Workers之網站也能多執行緒的實作_html5教學技巧

WBOY
WBOY原創
2016-05-16 15:49:311668瀏覽

Web Workers 是在HTML5中新增的,用來在web應用程式中實現後台處理的一種技術

在HTML4中,js創建的程式都是單線程的,如果花時間比較長的話web界面就會長時間沒有響應,最惡劣的情況還會跳出一個腳本提示框:

提示腳本運行時間過長,是否繼續。 。 。 。於是引出了本文的主角:Web Workers API

使用這個API使用者可以非常容易的建立在後台運行的線程,要建立後台程式很簡單:

複製程式碼
複製程式碼


程式碼如下:


var worker = new Worker('*.js');
注意:後台執行緒是不能存取頁面或視窗物件的
可以透過發送訊息與接受訊息與後台執行緒傳遞資料:
worker.onmessage = function (e) {};
worker.postMessage = function (e) {};
說一下求和:
複製程式碼


程式碼如下:





>






於是我美麗的框框給出來了。 。 。但使用web worker便不會:
複製代碼


代碼如下:








複製程式碼


代碼如下:


onmessage = function (e) {
var num = e.data;
var r = 0;
for🎜> for (var i = 1; i r = i;
} postMessage(r);

}

我有時候就在想,我沒事幹嘛計算那麼大的數字啊。 。 。 。 。當然這是無聊的坑爹,但我想有個場景可能需要用到這個。 在前面學習file api時,有個讀取本地文件的操作,若是文件過大會很慢,不知道這個可以應用上去嗎?二次學習時有必要試試。


與執行緒進行資料互動

我們這裡完成一個功能,在前台隨機產生數組,然後在後台計算能被3整出就返回前台打印:
複製代碼程式碼如下:

主程式



標題>

跨度
{
填充:10px;
}


script src="../ jquery-1.7.1.js" type="text/javascript">








複製碼
代碼如下:

產生快照的程式
onmessage = function (e) {
var arr = [];
for (var i = 0; i arr.push( parseInt(Math.random() * 100));
}

var worker = new Worker( 't2.js');
worker.postMessage(JSON.stringify(arr));
worker.onmessage = function (e) {
//把整理結果發回前台
postMessage( e.data);
};
}


複製代碼
代碼如下:

判斷所有資料是否被3整除


判斷所有資料是否被3整除
onmessage = function (e) {
var arr = JSON.parse(e.data);
var str = '';
for (var i = 0, len = arr.length; i if (parseInt(arr[i]) % 3 == 0) {
if (str != '') str = ';';
str = arr[i];
}
}
postMessage(str);
close();
};

程式邏輯描述:

這裡用了一個線程

先執行前台程序,這裡初始化了一個子執行緒「t1」用於將100個叢集初始化

然後子執行緒t1又初始化了子執行緒t2(用於批次傳輸,取出能被3整除的數字,組成字串),t1將批次資料傳給t2

t2接收t1數據,計算後將字串轉給t1,t1轉給前台,前台執行自己的邏輯

流程結束

結語

簡單來說,我這裡就是聲明子線程,然後發送資料給子線postMessage,等待結果皆可。

這裡看來,結合上次的通訊API Web Sockets,可以將2個結合做一個網頁聊天程序,甚至還可以將本地儲存/本地資料庫的一些東西用到。

這個看起來可能是個不錯的東西。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn