2008-10-17 79 views
31

問題出在標題 - IE是行爲不端,並且說有一個腳本運行緩慢 - FF和Chrome沒有這個問題。這個頁面上的一個腳本導致即運行緩慢

我該如何找到問題。那個頁面上有很多JS。手工檢查不是一個好的想法

編輯:這是我正在從事的項目的一個頁面...但我需要一個工具來查找問題。

結束:原來是UpdatePanel - 不知何故它會變得「困惑」,並且需要很長時間才能處理。我只是把它扔出窗口 - 從現在開始只會使用JQuery:D。

而且我選擇雷米夏普的的answere因爲我真的不知道該工具,似乎很酷。

+1

http://support.microsoft.com/kb/175500 – 2010-11-03 04:34:40

+0

謝謝,那是我正在尋找的答案。我創建了將在本地機器上的客戶運行的頁面,這是非常密集的JS(允許記錄100,000s搜索/排序),所以真的沒有辦法「優化」任何進一步的,這只是大量數據操作的問題。 – jsuggs 2011-01-27 20:24:54

回答

18

讓自己的IBM頁事件探查器的副本:

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=61d74777-1701-4014-bfc0-96067ed50156

它是免費的(總是贏)。在後臺啓動它,給它幾秒鐘,然後在IE中刷新頁面。回到分析器,它將列出頁面上使用的所有資源,併爲您提供詳細的配置文件信息 - 特別是JavaScript需要很長時間執行的情況。

找到問題的根源應該是一個好的開始。

如果腳本標記是內聯,我建議創建該文件的本地副本,並分離出的腳本標記,如果你能到單獨的文件。

9

刪除一半的代碼,看看它是否仍然發生。如果不是,它在你刪除的一半。重複,直到找出哪個代碼塊導致問題。

+2

已經嘗試過這一個 - 但仍然沒有運氣......將繼續嘗試。我希望有某種工具。 – sirrocco 2008-10-17 15:49:10

+0

爲我工作。罪魁禍首是selectivizr。這裏的修復: - https://github.com/keithclark/selectivizr/pull/51/files – BenG 2015-09-04 11:11:05

3

它通常是造成這種情況的無限循環。檢查你的循環和退出條件。

0

我不相信有一個工具可以找到有問題的腳本。你可以嘗試附加一個像Visual Studio一樣的IE調試器,也許它會在問題出現的地方斷開。但我無法保證這項工作。

在當我有我只是註釋掉的代碼段,以測試縮小在問題發生時,通常在二進制搜索型模式類似的問題了過去。註釋掉JavaScript庫的一半,等...

除了如其他人所說的,這種類型的問題,從大循環和許多setTimeout函數調用或setTimeout的遞歸循環發生。

0

如果JavaScript將頁面處理連接超過10秒鐘,您會收到此消息。 IE顯然有一個較慢的JavaScript引擎,造成這種情況。

我猜測,一些代碼優化肯定會有幫助,並儘量減少對JavaScript的頁面加載執行的量。也許使用setTimeout()推遲處理一些不必要的事情,如果你必須的話。

至於工具去,使用Firebug的探查,看看你花了這麼多時間。

+0

的事情是,它沒有顯示該消息之前等待10秒..也許2-3秒。但是......直到週一,我將無法測試......將在星期一更新。 – sirrocco 2008-10-17 18:47:16

51

長期運行的腳本不同:

  • IE將提高一次500萬個報表已經執行(more info on MSDN
  • Firefox中的警告如果腳本花費超過10秒(more info on MDN)長會警告
  • 如果腳本超過5秒鐘需要更長的時間Safari會警告
  • 人權委員會ome(1.0)沒有設置限制,只會繼續嘗試,直到出現OutOfMemory異常,並在此時崩潰
  • Opera將會持續運行,不會有任何警告。

Nicholas Zakas has written an excellent article covering this topic.

這樣 - 來避免這些問題的最佳途徑是通過減少循環,遞歸和DOM操作。

1

我只是blogged about this並把我認爲是一個非常時尚的解決方案。所以看看。如上所述,我的解決方案只是將長時間運行的操作分解爲塊,但我提供了一個很好的工具類來執行此操作。

感謝

圭多

0

如果你有過JavaScript控件,你可以分解成單獨的腳本或嘗試延遲加載的方法。

只是我的$ .02

1

你也可以檢查是否有一個谷歌分析的javascript包括在頁面中。該錯誤只發生在IE瀏覽器,一旦谷歌代碼被刪除,它的工作!

1

確保下面的JavaScript代碼只運行一次:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(win_onload); 

上面的代碼是功能win_onload()內。

0

在我的情況下,綁定到很多行的GridView中有太多的ASP.NET HoverMenuExtender控件導致性能非常低。我刪除了HoverMenuExtender,我的速度問題(和對話框)消失了。與彈出對話框的原因不完全相關,但它可能有助於某人。

1

我發現添加alert('before X')alert('after X')有助於我找到我的問題。我將他們添加到我的$(函數(){

}

0

有這類警報

  1. 通過IE執行JS指令號超過預定極限幾個原因。這可以通過編輯windows註冊表來解決,參見Here

  2. 優化javascript代碼,使執行時間減少。

  3. JS代碼優化是一個真正的試驗和錯誤的問題,有幾個拇指規則這樣做。只是谷歌它。
相關問題