你如何对JavaScript代码进行性能测试?

2022-08-29 23:35:45

CPU 周期、内存使用情况、执行时间等?

补充:除了感知代码的运行速度之外,是否有一种定量的方法来测试JavaScript的性能?


答案 1

分析器绝对是获取数字的好方法,但根据我的经验,感知性能对用户/客户至关重要。例如,我们有一个带有Ext手风琴的项目,该手风琴扩展以显示一些数据,然后是一些嵌套的Ext网格。实际上,所有内容的渲染速度都非常快,没有一个操作需要很长时间,一次渲染的只是很多信息,所以对用户来说感觉很慢。

我们“修复”了这个问题,不是通过切换到更快的组件,或者优化一些方法,而是通过首先渲染数据,然后使用setTimeout渲染网格。因此,信息首先出现,然后网格将在一秒钟后弹出到位。总体而言,这样做需要稍微多一些处理时间,但对于用户来说,感知到的性能得到了改善。


如今,Chrome Profiler和其他工具普遍可用且易于使用,console.time(),console.profile(performance.now()也是如此。Chrome还为您提供了一个时间轴视图,可以向您显示是什么杀死了您的帧速率,用户可能正在等待的位置等。

查找所有这些工具的文档非常容易,您不需要SO答案。7年后,我仍然会重复我最初答案的建议,并指出你可以让慢速代码永远运行,而用户不会注意到它,而代码在他们这样做的地方运行得非常快,他们会抱怨相当快的代码不够快。或者您对服务器 API 的请求花费了 220 毫秒。或者其他类似的东西。重点仍然是,如果你拿出一个探查器去寻找工作,你会发现它,但它可能不是你的用户需要的工作。


答案 2

我确实同意感知性能才是最重要的。但有时我只是想找出哪种做某事的方法更快。有时差异是巨大的,值得了解。

你可以只使用javascript计时器。但是我通常使用原生Chrome(现在也在Firefox和Safari中)devTool方法获得更一致的结果。console.time() & console.timeEnd()

我如何使用它的例子:

var iterations = 1000000;
console.time('Function #1');
for(var i = 0; i < iterations; i++ ){
    functionOne();
};
console.timeEnd('Function #1')

console.time('Function #2');
for(var i = 0; i < iterations; i++ ){
    functionTwo();
};
console.timeEnd('Function #2')

Results Look like this

更新(4/4/2016):

Chrome Canary最近添加了行级别分析开发工具源选项卡,让您确切地看到每行执行所花费的时间!enter image description here