2012-02-09 54 views
6

我有一個頁面(A),這是一個沉重的JavaScript頁面,當我離開此頁面轉到頁面B時,它需要很長時間。當我從不同的頁面轉到頁面B時,速度非常快。所以它與頁面A和可能的JavaScript有關。響應和頁面加載之間15秒的繁重Javascript頁面間隙

當我運行從顯影劑工具IE 9它顯示間隙的網絡分析器〜響應和DomContentLoaded(事件)之間15秒。

頁面A帶有JavaScript,因爲它運行Xopus Editor,一個富文本XML編輯器。

沒有任何人有什麼我能做的要麼分析差距會發生什麼或有什麼我可以做,使頁A卸載更快的任何想法。

+0

另請參閱:http:// stackoverflow。com/questions/855126 – 2012-02-09 08:30:16

+0

感謝您的建議,我檢查了javascript,並且沒有電話顯示需要很長時間。它看起來像IE中的垃圾收集或類似的東西。 FF和chrome響應迅速。 – 2012-02-09 09:51:46

+0

它只發生在特定的頁面B嗎? – user123444555621 2012-05-21 16:40:39

回答

2

這是一個長鏡頭,因爲有不對的地方約eleventy百的事情,但它可能是地方開始。這個腳本代碼添加到頁面的最後一個:

<script> 
    function unloadJS() { 
     var scripts = document.getElementsByTagName("SCRIPT"); 
     for (var index = 0; index < scripts.length - 1; index++) 
     { 
     var file = scripts[index].getAttribute("src"); 
     var start = +new Date(); 
     scripts[index].parentNode.replaceChild(document.createElement('script'), 
               scripts[index]); 
     var elapsed = +new Date() - start; 
     alert(file + ": " + elapsed.toString()); 
     } 
     return false; 
    } 
</script> 

此代碼試圖迫使每個加載網頁上的JavaScript文件的卸載,報告的時間才能把它們的量以毫秒爲單位。觸發此爲方便,即在卸載或一個按鈕:

<button onclick="return unloadJS()">Go!</button> 

這可能無法正常工作/告訴你,你需要知道,因爲當腳本斷開IE可以拒絕做垃圾回收的。這可能是因爲IE真的,當你做到這一點,或者只是因爲IE不卸載它們 - 嗯,什麼奧狄說:)

在任何情況下,這不是一個解決方案; JS卸載時無關緊要,垃圾收集仍然需要相同的時間。這只是第一次診斷的嘗試,就像你所要求的。希望它可以/幫助...

0

也許你正在使用一個像PrototypeJS這樣的Javascript庫,它鉤住頁面unload事件,並且當頁面卸載時,它通過一個數組循環移除所有DOM元素的所有事件偵聽器在頁面上。如果我們知道您正在使用的庫,我們可以模擬一個調用來卸載頁面,以強制庫執行它的卸載功能。之後,啓動計時器以查看加載其他頁面所需的時間。

2

IE sucks。但有幾種工具可用於分析您的頁面。

FiddlerHttpWatch是一個很好的工具,用於分析您的請求時間表,並查看是否需要很長時間才能下載所有繁重的JavaScript代碼。這通常是減慢js頁面速度的主要原因。由於IE doesn't take parallel downloading js very well,數百個小型JavaScript文件需要花費更多時間。

對於這種情況,試試minifying your javascript。這是提高頁面加載性能的最直接方式。

如果它沒有多大幫助。您可能需要YSlow來分析詳細的性能。儘管它不適合IE,但在Chrome或FF下修復一些問題可能會影響IE下的性能。

在你的控制檯添加一些日誌,縮小範圍,也許你可以找到執行性能問題。