1
我有一個耗費DOM(瀏覽器)相關JavaScript過程的資源。啓動時會阻止該頁面(其他DOM相關處理)。是否有可能異步並行運行此進程,並在完成後將結果傳遞給主頁? Web工作者並不是這種情況,因爲流程使用DOM。用於DOM相關處理的JavaScript並行線程
這可以通過iframe實現嗎? JS是否也在iframe塊託管頁面DOM中啓動?
我有一個耗費DOM(瀏覽器)相關JavaScript過程的資源。啓動時會阻止該頁面(其他DOM相關處理)。是否有可能異步並行運行此進程,並在完成後將結果傳遞給主頁? Web工作者並不是這種情況,因爲流程使用DOM。用於DOM相關處理的JavaScript並行線程
這可以通過iframe實現嗎? JS是否也在iframe塊託管頁面DOM中啓動?
其實它是使用WebWorkers的一個主要例子,但正如你所說的,你不會在那裏引用DOM。你唯一的選擇是把這個過程分解成更小的任務。如果你能做到這一點,你需要問自己兩個問題
如果你能回答與沒有這兩個問題,你可以設置一個失控腳本計時器和異步執行這些任務。例如:
var taskList = [
function() {},
function() {},
function() {},
function() {}
// a whole lot more entrys
]; // in a real-world scenario you would `.push()` values or functions
(function _loop() {
setTimeout(function() {
var start = Date.now();
do {
taskList.shift()();
} while(taskList.length && Date.now() - start < 100)
if(taskList.length) setTimeout(_loop, 100);
},100);
}());
上面algorythm將執行由taskList
儘可能快地包含的功能,但100毫秒最大值的時間範圍內。這將確保瀏覽器UI線程在處理期間不會被阻塞的時間超過100ms。因此,瀏覽器將保持響應。
非常感謝你)我會盡力實施你的方法,我相信我可以把這個過程分解成更小的部分。如果成功,將標記爲答案。 – WHITECOLOR
繼承人我寫了一些代碼的鏈接來幫助編寫基於計時器的任務與DOM訪問 - https://github.com/jameswestgate/taskjs –