2012-01-13 68 views
16

我在修改IE8中XP的位置哈希時遇到了問題。簡單地調用:window.location.hash賦值在IE8中痛苦地緩慢

self.location.hash = "whatever" 

需要800ms的〜1800ms

我不知道有什麼可以慢下來。我在其他一些網站上查看了相同的說明,但速度並不慢。

任何線索可以讓它如此緩慢?我很抱歉,但我不能舉一個在線的例子。


編輯: 這是我在IE瀏覽器控制檯中看到什麼,輸入:

console.log(new Date().getTime()); 
self.location.hash = "sfdsd"; 
console.log(new Date().getTime()); 

輸出:

JOURNAL : 1326468325447 
JOURNAL : 1326468327390 
undefined 

這使得幾乎2000毫秒,如果我讀正確,對於單分配:/。


EDIT2:因爲它似乎並不夠清晰,更preofiled代碼:

var profileThat = function() {self.location.hash = "whatever"}; 
$('#keywatchHeader').click(profileThat); 

探查結果兩次點擊:

profileThat 2 3475,00 3475,00 
hidden 4 50,07 50,07 http://192.168.0.30/kw5/js/jquery/jquery-1.6.2.js 6 608 
eventHandle 8 3525,07 40,06 http://192.168.0.30/kw5/js/jquery/jquery-1.6.2.js 2 595 
get 4 20,03 20,03 http://192.168.0.30/kw5/js/jquery/jquery-1.6.2.js 6 419 
get 6 10,01 10,01 http://192.168.0.30/kw5/js/yui2/dom/dom.js 96 

EDIT3 :

我出於好奇而對樹上的節點號進行了一些測試,結果令人驚訝。這樣的電話後:後

document.getElementsByTagName('*').length; //3621 
$('#keywatchPanels').children().remove(); 
document.getElementsByTagName('*').length; //332 

剖析給600毫秒,而不是1700ms每次通話!但是我很少用節點號來影響標籤寫作。


(edit4):我發現此相關的問題:Why is this piece of Javascript code so slow?(但這裏的答案只是「刪除」)

+0

你的頁面有多大?任何其他運行檢查散列的代碼? – epascarello 2012-01-13 13:21:49

+0

你的意思是什麼?像素寬度,重量,元素?有YUI2歷史管理器正在檢查散列,但它只是這個指令誰吸這麼多時間,無論我是否在代碼或控制檯執行它。 – BiAiB 2012-01-13 13:24:37

+0

我無法重現。在IE8.0.6001.18702上佔用大約100ms的時間。你是如何衡量表現的?您是否使用[IE腳本分析器](http://msdn.microsoft.com/en-us/library/dd565629%28v=vs.85%29.aspx#_start)?通過IE腳本分析器和「知覺」兩者均可獲得 – user123444555621 2012-01-13 14:23:05

回答

16

最後,我發現我的答案回答的評論一個相關的問題: Why is this piece of Javascript code so slow?

唉,剛剛發現同樣的問題一個博客的人。顯然 只有在運行IE Developer Toolbar時纔會很慢。現在 我該怎麼配置? -_-」

- Aistina 5月7日09時22分

爲什麼早沒我雖然什麼呢?

+0

您仍然可以通過記錄更改location.hash之前的時間以及更改後的時間並警告其差異(如上面的問題中所述)來進行配置文件。我的時差在400ms到600ms之間,我認爲這很高。你有沒有找到緩慢的解決方案呢? – 2013-07-29 11:25:31

+0

沒有答案不同於關閉調試器。就像我在問題中提到的那樣(見編輯3),減少頁面費用(通過刪除所有元素)確實減少了響應時間。但在這一點上,這是比科學更多的宗教信仰。 – BiAiB 2013-07-29 13:18:55