首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Safari在这里会提供几乎相反的结果?

问为什么Safari在这里会提供几乎相反的结果?
EN

Stack Overflow用户
提问于 2010-09-30 02:53:16
回答 2查看 122关注 0票数 1

在这里测试: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%)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-30 02:56:17

Javascript有一个规范,但它没有定义实现;它由浏览器供应商决定如何实现规范(这也会导致大量的跨浏览器问题,尽管他们最近在这方面做得越来越好)。很可能不同的浏览器实现您正在使用的各种方法的方式不同。

票数 2
EN

Stack Overflow用户

发布于 2010-09-30 04:32:10

这些都不是真正公平的测试。直接查找速度更快的原因是,每个其他测试也在条件检查的基础上执行完全相同的查找。也没有真正的理由去写像这样的代码:

代码语言:javascript
复制
if (t == 'e') c['e'];

这显然违反了DRY (不要重复自己),并且在查找中使用字符串文字不会节省任何时间,因为仍然需要获取变量t的内容以进行比较。

也是

代码语言:javascript
复制
if (c[t]) c[t]();

就像懒惰一样

代码语言:javascript
复制
c[t] && c[t]();

至于为什么Safari提供了这样相反的结果,我不知道,因为“操作a+操作b<操作a”是不合逻辑的。应该指出的是,Javascript中的性能测试通常是不可靠的,因为Date对象被限制在毫秒内,即使这样,通常也不能为有用的结果提供足够的准确性。

最后,在其他条件相同的情况下,对象查找永远不会比if/else或switch语句快,实际上可能会慢几个数量级。此外,if/else和switch之间的差异应该可以忽略不计,当然,它高度依赖于特定的浏览器/解释器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3824888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档