如果我的JavaScript事件似乎都不是原因,我如何诊断网页性能问题?
我有一个使用jqGrid的网络应用程序。在发生任何事情之前点击网格会导致2-3秒冻结(包括任何点击事件被点击)。点击页面上的任何其他位置都很好(即时响应)。删除行会减少延迟(50行非常慢,但5行会产生即时响应)。
取消绑定页面上的所有事件({1}}并不能解决问题,这让我相信有些事情我不知道。
如果我将页面源保存到桌面并在浏览器中打开该HTML文件,我看不到这种缓慢的行为。这似乎表明这实际上是一个JavaScript问题。
我正在使用Firefox 3.6.8和最新版本的Firebug进行测试。 这个问题也影响到其他浏览器,但在快速浏览器中却不太常见(Safari和Chrome)。
更新:令人惊讶的是IE7似乎没有遭遇这种滞后。我在jqGrid点击事件的最开始处发出警报,并在点击网格后立即出现事件框。 Firefox仍然有一个多秒的延迟,而Chrome和Safari的滞后时间非常短(不像IE那么短,但仍然很短)。
更新#2 :我相信这可能是Firefox中的一个错误。尽管我正在解除所有事件的绑定/死亡,但我猜测Firefox并未正确清理所有事件。我删除了所有其他事件,并向网格表添加了单击事件并启动了探查器。然后我在桌面上点击一次并结束了探查器。我找回了“没有活动来描述”。消息。
答案 0 :(得分:2)
我可以推荐的最好的工具是dynaTrace AJAX Edition,它是IE的分析器(通常是JS性能最慢的,所以实际上是一个很好的测试环境,可以开始优化)。
它将为您提供完整的细分,向您显示重复的方法调用,调用树以及您的CPU周期。 Check out their tutorials on usage/features开始使用。
哦,是的,它是免费的:)
答案 1 :(得分:0)
您是否正在使用所有点击事件的live()?如果特定页面上的实例太多,有时live()确实会降低页面性能。特别是Ajax关联的内容包含了生活必须重新绑定的链接。
有关详细信息,请参阅此处: