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