2010-03-13 111 views
3

所以我們有這個產品,而且它在IE中真的很慢。 我們已經應用了許多由IE人員自己建議的做法(like thisthis),並嘗試犧牲乾淨的代碼來提高DOM操作等關鍵部分的性能。Javascript,IE,字符串和性能問題

然而,正如你可以在這個IE探查截圖中看到.. alt text http://i43.tinypic.com/24g57c1.png

只是「字符串」是最大的罪犯。幾乎750毫秒的專屬時間。

這是否意味着IE只花費750ms來實例化字符串?我也讀了Opera dev blog這個東西:

構建腳本可以刪除空白, 意見,並在陣列 查找替換字符串(以避免MSIE一個字符串的每一個 實例創建 字符串對象 - 甚至在 條件下)

但是沒有關於這方面的更多信息。任何人都可以澄清?似乎IE必須在代碼中每次創建完整的String實例,這可以解釋這一點,但我不知道數組查找優化會是什麼樣子。 順便說一句,我們並沒有在代碼中的任何地方真正做很多字符串連接。

我們使用的庫是MooTools的1.2.4

可以理解的任何建議! Thx

更新 - 我對上面提到的關於「數組查詢優化」的提示特別感興趣。我們的庫很大(1MB),所以它有很多字符串,就像其他JS代碼一樣。但是由於我們的圖書館比大多數圖書館都大,這些字符串實際上導致了速度問題。

此外,沒有任何人知道,如果添加的東西到String.prototype使每個實例慢?

+0

是否有可能擁有調用樹分析視圖? – 2010-03-13 00:15:24

回答

5

我搶一個分析器,它會給你更深的看法,你可以看到關於字符串到底是什麼這麼長時間。對於IE特別有dynaTrace AJAX Edition(是的,它是免費的)。

我會激發你同頁那裏,它會給你一個樹分析,這樣你可以看到這是怎麼回事...用什麼低級別功能的熱點視圖沿耗時最長。

+0

借調 - dynaTrace太棒了,它幾乎很奇怪 – Pointy 2010-03-13 01:26:07

+0

dynaTrace看起來非常棒,但是我們的產品在運行時不起作用。沒有錯誤或任何事情,它只是不起作用。吮吸。但是我已經知道哪個底層函數導致了大多數性能問題,並且它是'String'。所以我問的是,如果有人知道如何優化dynaTrace的字符串 – adamJLev 2010-03-15 15:53:37

+0

+1的使用。從未聽說過它。 – 2010-03-15 16:41:38

0

字符串在Javascript中是不可變的。當你做這樣的事情含義:

alert("hello" + " world"); 

三串正在創建:

  1. 你好
  2. 的hello world

發現這種情況並解決了那些可以有幫助。就像Nick說的那樣,使用探查器精確地確定使用Strings的特定代碼是否會造成麻煩,這可能是最好的選擇。

+0

沒有特定部分的代碼對字符串做任何事情都很瘋狂,大多數庫在源代碼中有成千上萬的字符串,但是當你有一個1 MB的庫時,那麼這些就成了一個問題。我特別感興趣的是Opera博客在他們的博客中提到的提示 – adamJLev 2010-03-15 15:55:16