2010-07-30 44 views
0

如果我的JavaScript事件似乎都不是原因,我該如何診斷網頁性能問題?JavaScript之外的事件緩慢

我有一個web應用程序使用jqGrid。點擊網格會在發生任何事情之前導致2-3秒的凍結(包括任何點擊事件)。點擊頁面上的其他任何地方都可以(即時響應)。刪除行會減少延遲(50行非常慢,但5行會產生即時響應)。

解除頁面上的所有事件àla $('*').add(document).unbind()不能解決問題,這導致我相信有我缺少的事件。

如果我將頁面源保存到桌面並在瀏覽器中打開該HTML文件,我看不到這種緩慢的行爲。這似乎表明,這實際上是一個JavaScript問題。

我正在使用Firefox 3.6.8和最新版本的Firebug進行測試。 該問題也影響其他瀏覽器,但在快速瀏覽器(Safari和Chrome)中影響較小。

更新:令人驚訝的是IE7似乎沒有受到這種滯後的影響。我在jqGrid點擊事件的一開始就發出了一個提醒,並且在點擊網格後立即出現了事件框。 Firefox仍然有一個多秒的延遲,Chrome和Safari的延遲時間非常短(不像IE那麼短,但仍然很短)。

更新#2:我相當有信心,這可能是Firefox中的一個錯誤。儘管我正在解除/終止所有事件,但我猜測Firefox並沒有正確地清理所有事情。我刪除了所有其他事件,並將一個單擊事件添加到網格表並啓動了分析器。然後我在桌上點了一下,結束了剖析器。我回來了一個「沒有活動來配置文件」。信息。

回答

2

我可以推薦的最佳工具是dynaTrace AJAX Edition,它是IE的一個分析器(通常是JS性能最慢的,所以實際上是開始優化的一個很好的測試環境)。

它會給你一個完整的分解,顯示你重複的方法調用,調用樹和你的CPU週期去。 Check out their tutorials on usage/features開始。

噢,它是免費的:)

+0

謝謝,我會檢查了這一點。希望它比Firebug的profiler更有用,它報告「沒有配置文件的活動」。 – MikeWyatt 2010-07-30 17:50:01

0

是否使用現場()與所有這些點擊的事件?如果特定頁面上的實例太多,live()會真的減慢頁面性能。特別是Ajax關聯的內容包含現場必須重新鏈接的鏈接。

這裏看到更多的信息:

Does jquery live slow down websites?

+0

我無法在jqGrid代碼中找到任何對live()的引用,並且我從未使用它。爲了安全起見,我解除了所有現場活動('$('*').add(document).die()')。這似乎對滯後沒有任何影響。 – MikeWyatt 2010-07-30 17:51:03