前面的話
客戶端javascript其中一個基本的特性就是單線程:比如,瀏覽器無法同時運行兩個事件處理程序,它也無法在一個事件處理程序運行的時候觸發(fā)一個計時器。Web Worker是HTML5提供的一個javascript多線程解決方案,可以將一些大計算量的代碼交由web Worker運行從而避免阻塞用戶界面,在執(zhí)行復(fù)雜計算和數(shù)據(jù)處理時,這個API非常有用。本文將詳細介紹Web Worker
前提
在使用Worker之前,首先要檢測瀏覽器是否支持這個API
[注意]IE9-瀏覽器不支持
if (window.Worker) { // to do }
使用Web Worker有以下幾點限制:
同域限制。子線程加載的腳本文件,必須與主線程的腳本文件在同一個域
DOM限制。子線程所在的全局對象,與主進程不一樣,它無法讀取網(wǎng)頁的DOM對象,即document、window、parent這些對象,子線程都無法得到。(但是,navigator對象和location對象可以獲得。)
腳本限制。子線程無法讀取網(wǎng)頁的全局變量和函數(shù),也不能執(zhí)行alert和confirm方法,不過可以執(zhí)行setInterval和setTimeout,以及使用XMLHttpRequest對象發(fā)出AJAX請求
文件限制。子線程無法讀取本地文件,即子線程無法打開本機的文件系統(tǒng)(file://),它所加載的腳本,必須來自網(wǎng)絡(luò)