簡體   English   中英

調試錯誤消息:“此頁面上的腳本導致 Internet Explorer 運行緩慢”

[英]Debugging error message: “A script on this page is causing Internet Explorer to run slowly”

我的一個用戶在 IE 8 中間歇性地收到一個對話框,上面寫着:

此頁面上的腳本導致 Internet Explorer 運行緩慢

此問題已在 MSDN 論壇和網絡上的其他地方多次報告。 例如:

所以,這個問題是那些和許多其他問題的重復。 但它是故意重復的,因為我認為這些問題中的任何一個都沒有以幫助用戶(開發人員)准確確定他的場景中導致對話框出現的原因的方式回答。

我知道基於此頁面:

http://support.microsoft.com/kb/175500

當新腳本開始執行(通過各種方式)后執行了一定數量的語句時,將出現該對話框。 默認情況下,語句數為 5,000,000,但這可以通過注冊表項進行配置。

這個問題的一般處方是:

  • 少寫代碼。 不幸的是,這並不總是可能的。
  • 使用網絡工作者。 這不是 IE 10 之前的 IE 選項,也不是某些移動瀏覽器的選項。
  • 使用 setTimeOut、setInterval、事件處理程序等來分解腳本。 這是所有瀏覽器的合法策略。

所以,我從一般意義上理解問題是什么,我也理解解決問題的選項,同樣是一般意義上的。 問題是,如何確定代碼的哪些區域導致特定用戶出現對話框? 通常這個問題發生在一個非常大的代碼庫(包括第三方庫)上,因此在沒有一些工具支持的情況下手動審查代碼庫是不可行的。

大多數瀏覽器,包括 IE8 和更高版本,都有分析工具,使開發人員能夠確定 JavaScript CPU 使用情況。 除了 IE 之外,其他瀏覽器不是根據執行的語句數量而是根據腳本執行所花費的時間來判斷腳本是否長時間運行。 為此,瀏覽器中可用(或作為附加組件)的分析器可以識別執行函數所花費的百分比和通常原始時間,包括和專門用於函數,並且可以相應地對結果進行排序。 IE 的分析器還會為您計算函數被調用的頻率。 這些分析器都沒有告訴您在分析期間執行了多少個函數中的代碼語句; 它們只告訴您在函數中花費了多長時間以及函數被調用了多少次。 這對 IE 的慢速腳本對話框邏輯沒有幫助,該邏輯基於執行的語句數(而不是時間)。 有時執行函數所花費的時間與語句數量之間存在相關性,但這並不是一個可靠的關系,因為當然不同類型的語句可能需要非常不同的執行時間(例如,許多原生 JavaScript 函數比更新 DOM 的調用;兩者具有相同的語句計數,但前者執行速度比后者快,因此檢查 %/raw time 不是很有用)。

我使用的一種具有一定價值的方法是,當出現慢速腳本對話框時,在 IE 中啟動調試器(如果尚未啟動)並在調試器中選擇 break on next statement 命令。 然后單擊瀏覽器中允許慢速腳本繼續執行的對話框按鈕。 此時,調試器被調用,開發人員可以檢查調用堆棧以確定在慢速腳本對話框出現時正在執行的內容。 這是可以的,但這是一種非常手動的方法,並且不能保證不會有多個腳本在運行,這些腳本可以在不同的時間調用對話框。

我看到的一個有趣的想法是使用 JavaScript 代碼覆蓋工具來檢測代碼庫。 有多種 JavaScript 代碼覆蓋率選項,但可以動態檢測代碼的瀏覽器擴展的易用性似乎是一個理想的解決方案。 (另一個有趣的想法是使用代理服務器,例如http://siliconforks.com/jscoverage/manual.html ; 'jscoverage --server --proxy',但我幾乎無法在任何網站上使用它,除了硅叉網站本身)。 有一個適用於 Chrome 的概念驗證( http://googletesting.blogspot.ca/2011/10/scriptcover-makes-javascript-coverage.html ),我認為這可能是幫助解決慢速腳本問題的一個很好的開始-- 如果可以為 IE 進行這樣的擴展。

因此,重申我的主要問題是可以使用哪些工具/進程來調試/分析出現在用戶機器上的慢速腳本對話框? 一個子問題是,有沒有人知道任何可以重新利用的 JavaScript 代碼分析工具來幫助診斷 IE 中的慢速腳本對話框,並且只需最少的部署工作? 理論上,是否可以編寫一個 IE 擴展來實現像 Google 的腳本覆蓋擴展那樣的代碼覆蓋?

謝謝,

聖母院

在過去,JavaScript 的使用並不多。 頁面習慣於我更靜態。 如今,PC 的功率較低,在服務器上運行復雜任務更為流行。 JavaScript 僅用於某些動畫。

微軟(我的方式或沒有方式)花時間承認大量使用 JavaScript 的內容。 (他們還在 IE8 中擺弄他們的 JScript)。 在 IE9 之前,他們認為在腳本中運行 > 5 000 000 條指令是一個潛在的錯誤。

我不知道有什么工具可以檢索指令計數。 這是一個瀏覽器內置功能。

但是大多數瀏覽器會檢索函數的執行時間。 我知道在每台不同的計算機中,相同數量的指令可能需要不同的時間,但您可以設置一個基准。

在機器上運行一個包含 5 000 000 條指令的腳本,看看運行需要多長時間。 然后利用這段時間對您的其他 JavaScript 進行基准測試。 它不是 100% 准確,但一旦你擺弄它,它就會變得接近。

由於舊的 IE 開發工具很差,您可以使用一些第三方工具。 這里的用法示例: deep-tracing-of-internet-explorer

無論如何,“此頁面上的腳本導致您的計算機運行緩慢...”只是IE4 - IE8 中的問題。 由於這些瀏覽器已經過時,這個問題也應該如此。

暫無
暫無

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

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