我希望我的处理器越快,我的代码运行得越快。
我可以使用。
测量代码到毫秒精度new Date.getTime()
两者之间有什么关联?
我怎么能指望这与处理器运行在3.2 GHz的处理器有关。
任何人都可以量化这种关系,即使这是一个非常粗略的估计吗?
// start_time
run some simple code to be timed.
// end_time
答案 0 :(得分:2)
分配给JS脚本的[EDIT: CPU ]时钟时间由许多因素决定,包括:
可以在Windows 8的“高级电源选项”菜单中看到此演示。展开Internet Explorer节点,您会注意到下面的条目是JavaScript timer frequency
。这正是你认为的 - 一个控制JS时钟'滴答'的频率的设置。一秒钟内的滴答越多,JS引擎执行代码的次数越多,执行的代码越多,所需的功率就越大。
所以回答你的问题: 是的,在一般意义上,处理器时钟速度可以决定特定JS的运行速度,但假设它是一个直接的相关性是错误的。
编辑(更多信息):
我无法挖掘链接,但如果我找到它,我会在这里更新。使用setTimeout
或setInterval
,您可以传递到实际被尊重的那些方法的最小时间单位是100(ms)。频率可能高于此值,但保证100毫秒
我发现了一些接近我在本文中思考的东西: http://javascript.info/tutorial/settimeout-setinterval
基本上,在排队的JavaScript计时器中 - 你可以调用setTimeout(fn, 10)
,你的请求将排队等待10ms后执行,但这并不意味着将在这段时间后执行,只是它排队等待。如果您测量预期值与实际值之间的差值(高于阈值,可能超过100毫秒),您可以收集偏移量数据以计算脚本运行的结果频率(或“时钟速度”)。有关以更精确的方式对JS进行基准测试的示例,请参阅this article
从第二篇文章中,我们看到你可以得到的最小超时是4ms:
使用setTimeout测量图形性能是另一个坏主意。在浏览器中,setTimeout间隔的上限为4毫秒,因此您可以获得的最大值为250 FPS。从历史上看,浏览器具有不同的最小间隔,因此您可能有一个非常破碎的简单绘制基准,显示浏览器A以250 FPS(4 ms最小间隔)运行,浏览器B以100 FPS(10 ms最小间隔)运行。显然A更快!不!很可能是B比A更快地运行绘制代码,比如A花了3毫秒而B花了1毫秒。不影响FPS,因为绘制时间小于最小setTimeout间隔。如果浏览器异步呈现,则所有投注均已关闭。除非你知道自己在做什么,否则不要使用setTimeout。