测量Javascript应用程序的CPU负载

我需要测量其他Javascript事件绑定的性能开销(使用jQuery live),开销可能会增加CPU负载,并且很难从执行时间分析中注意到。

如何衡量Javascript应用程序的两个不同版本之间的CPU负载差异?

另一种分析选择是dynaTrace Ajax版本 。 Resig 在这里快速概述了它 。 这是IE特有的(但是……在大多数情况下性能最差的那个……)

看一看,这里的所有建议都很棒,如果您正在查看IE问题(一些内部网应用程序被锁定),那么dynaTrace是一个优秀且仍然免费的工具。

Chrome开发工具非常棒,但由于Chrome不是浏览器,因此您不得不担心JS的性能,并且它会对事情进行大量优化,因此找不到其他浏览器的瓶颈也无济于事。 IE 8具有开发工具 ,可让您进行分析,因此除了通常的Firebug分析器之外,您可能会发现它很有用。

但是关于你的情况,让我说只是绑定一个事件不会导致很多CPU负载,更多的是内存问题,但你不必担心,除非你在页面上做了一些与众不同的事情。

此外,如果你特别关注jQuery.live函数,让我快速解释它是如何工作的:让我们说你做$('#linksWrap a').live('click', fn);

  • 这将创建一个且只有一个事件处理程序,并将其附加到#linkswrap
  • 当您单击其中一个链接时,click事件会冒出DOM树,最终到达#linkswrap
  • jQuery.live检测它实际来自哪个链接。 此信息位于浏览器Event对象中。
  • jQuery.live在被单击的链接的上下文中应用fn

如你所见,它实际上非常有效。 浏览器只附加一个事件,因此内存使用率很低,并且它也不需要经常检查新元素,它以一种很酷的方式使用事件冒泡。

实际上有人可能会争辩说,如果你将数千个事件附加到一个页面,假定你使用好的选择器,.live方法可能会更有效。 (例如.something .foo .bar.baz需要大量的遍历和冒泡,但#parentOfTheLinks a.links会很快)

我认为这种测量将非常具体。 如果您对此感到满意,请查看Chrome浏览器中的内置开发人员工具。 有一个选项可以记录性能并在以后比较结果。 这是入门指南 (请参阅底部的分析和优化video)。

除了关于Chrome开发工具的@Ivan回答之外,我还建议您查看适用于Chrome的Google Speed Tracer扩展程序。

对于比较CPU负载的非科学但快速的方法,您可以启动Chrome的任务管理器,并在不同的选项卡/窗口中打开这两个版本。 如果您正在进行优化,它将无法帮助您,但它可以一目了然地告诉您新版本是否占用较少的CPU。