在这里测试:http://jsperf.com/test-for-speed-of-various-conditionals
我感兴趣的是,其他人是否也得到了同样的结果,以及人们可能会如何看待为什么结果不同(特别是。w/ Safari)跨浏览器。有趣的是Firefox是如何民主地处理各种情况的。
如果我的方法有什么严重的错误,请告知:)
Firefox 3.6/Mac OSX 10.64:交换机= 824,352操作/秒(速度降低14%)
If/else = 530,062 (44%较慢,最慢)
Hash/lazy =968035(最快)
Hash/if/else = 963,765 (速度慢0%)
Chrome 6.0.472.63/Mac OSX 10.64:
交换机= 10,220,039操作/秒(速度降低62%)
If/else = 7,744,284 (71%较慢,最慢)
Hash/lazy = 27,130,039 (最快)
Hash/if/else = 25,297,370 (慢6%)
Safari 5.0.2/Mac OSX 10.64:
交换机= 15,044,132操作/秒(最快)
If/else = 1,793,051 (88%较慢,最慢)
Hash/lazy = 10,381,941 (慢30%)
Hash/if/else = 11,119,576 (慢26%)
Opera 10.10/Mac OSX 10.64:
交换机= 497,238次/秒(速度降低32%)
If/else = 250,904 (慢66%,最慢)
Hash/lazy = 740,520 (最快)
Hash/if/else = 634,424 (速度慢14%)
MSIE 8.0/Windows NT:
交换机= 176,267次/秒(速度降低60%)
If/else = 124,783 (72%较慢,最慢)
Hash/lazy = 447,421 (最快)
Hash/if/else = 442,736 (速度慢14%)
发布于 2010-09-30 02:56:17
Javascript有一个规范,但它没有定义实现;它由浏览器供应商决定如何实现规范(这也会导致大量的跨浏览器问题,尽管他们最近在这方面做得越来越好)。很可能不同的浏览器实现您正在使用的各种方法的方式不同。
发布于 2010-09-30 04:32:10
这些都不是真正公平的测试。直接查找速度更快的原因是,每个其他测试也在条件检查的基础上执行完全相同的查找。也没有真正的理由去写像这样的代码:
if (t == 'e') c['e'];这显然违反了DRY (不要重复自己),并且在查找中使用字符串文字不会节省任何时间,因为仍然需要获取变量t的内容以进行比较。
也是
if (c[t]) c[t]();就像懒惰一样
c[t] && c[t]();至于为什么Safari提供了这样相反的结果,我不知道,因为“操作a+操作b<操作a”是不合逻辑的。应该指出的是,Javascript中的性能测试通常是不可靠的,因为Date对象被限制在毫秒内,即使这样,通常也不能为有用的结果提供足够的准确性。
最后,在其他条件相同的情况下,对象查找永远不会比if/else或switch语句快,实际上可能会慢几个数量级。此外,if/else和switch之间的差异应该可以忽略不计,当然,它高度依赖于特定的浏览器/解释器。
https://stackoverflow.com/questions/3824888
复制相似问题