簡體   English   中英

避免出現“腳本運行時間過長”對話框,是否應該拆分函數並定期運行?

[英]Avoiding the “script is running too long” dialog, should I split up my function and run it at intervals?

我在其中一個頁面上運行着一個非常大的JavasScript for循環。 它太大了,導致舊版本的IE彈出窗口顯示如下內容:“此頁面的腳本使其運行緩慢,您要終止它嗎?”

我相信我已經盡可能地優化了它,所以現在我正在尋找替代方法。

我想知道創建一個運行前100次迭代,然后再進行100次迭代,然后進行第三次迭代直到所有迭代完成的時間間隔對我是否有益? 這樣是否可以防止IE彈出窗口聲稱腳本運行太慢?

Javascript是單線程的,所以這是主要的障礙。

如果要執行大量計算,最好使用Workers ,但是只有現代瀏覽器才支持。 這樣一來,您的計算就不會減慢應該在主線程中的UI的速度。 這是構建桌面應用程序時的常見做法。

如果您不介意花費比原先更長的時間,則拆分計算可能是一個好主意。 如果您選擇正確的時間,那應該可以防止彈出窗口出現。

您也許還應該重新考慮在客戶端執行大量計算的需求。

您可以使用: multithreading 它不是真正的多線程,它只是在使用計時器。 它將阻止彈出窗口。 但是我不確定在這種情況下是否有必要,除非您要制作完整游戲。

每當您的代碼沒有足夠快地將控制權交還給瀏覽器的主事件處理循環時,就會出現“腳本過長”瀏覽器彈出窗口。

如您在問題中建議的那樣使用setTimeout來批量觸發計算,確實會阻止彈出窗口的出現。

定期返回事件循環還可以使瀏覽器保持對其他UI事件的響應-您可以(例如)提供一個“取消”按鈕。 我建議您嘗試至少每秒產生一次,即使不是那么頻繁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM