OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

for in 比for loop慢至少20倍


分享到
分类 编程技巧   发布 ourjs  1392519788000
注意 转载须保留原文链接,译文链接,作者译者等信息。  
之前在:停止使用循环,教你用underscore优雅的写代码一文中,有评论提出for in的效率要比for loop(循环)的效率低非常多。现在我们测试一下在不同浏览器中使用for in, for loop和forEach在处理大数组时的效率究竟如何。

目前绝大部分开源软件都会在for loop中缓存数组长度,因为普通观点认为某些浏览器Array.length每次都会重新计算数组长度,因此通常用临时变量来事先存储数组长度,如:
for (var idx = 0, len = testArray.length; idx < len; idx++) {
  //do sth.
}
我们也会测试一下缓存与不缓存时的性能差异。

同时在每个测试循环中添加求和运算,来表明其不是空循环。

测试代码如下,点击运行即可查看

HTML 代码

<h4 id="browser"></h4>
<table id="results" class="table"></table>

JavaScript 代码



运行 [需稍等片刻]

测试结果

测试结果可能因计算而异,这是在我机器上运行用,Firefox, Chrome, IE三者测试结果拼接的一张汇总。

以下是几个观察到的结论

  • for in比for loop慢非常多,在Chrome中至少慢20倍
  • FF对forEach(ES5)做了优化,性能比for loop还要好一点,但Chrome/IEn性能均较差
  • FF/Chrome缓存Array.length均比直接用时要慢一点。除IE最新版缓存后性能提升微乎其微(这一点非常意外)
  • 在某些情况下,FF的JS引擎性能似乎比V8要好些
原文地址: 点此
社区评论 ( Beta版 )
  • #0 醉温柔 1392600056000
    浏览器会进步的……
  • #1 末尾曲 1392625753000
    难道不觉得开发完一个大型项目了之后,我不仅开发的更快,而且过了这几个月我俩的代码运行速度一样快了。。。
  • #2 蝶姐yrzhll 1392689165000
    for in 循环同样在查找对象属性时遍历原型链上的所有属性。包括原型自带的属性,所以最慢。
  • #3 风里麦笛 1392866302000
    [/可怜],但是for in 写上去最顺手啊。
  • #4 霓裳洛羽 1393083078000
    for in可以持久化所枚举变量,比较适合里面是异步的情况……
  • #5 WTF 1393391756000
    遍历 Array 的时候选择 for loop , 遍历 Object 的时候选择 for in 已经是常识了吧? 而且 for in 的时候还得保证 obj.hasOwnProperty() 这也是基本语法了. 建议大家写代码的时候开启 jsHint.可以跳过很多坑.
  • #6 云瓜令 1436856161705

    缓存应该用局部变量,也就是应该用 在 for 里面用 var 定义一下,才会快。

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. JavaScript专业八级测试,你能做对几道?
  2. 微软,请不要使用 Try/Catch
  3. Web服务性能测试:Node完胜Java
  4. 码农,骇客,程序员,开发者和计算机科学家的区别
  5. 为什么大神级程序员的C语言代码里到处都是goto?
  6. QQ邮箱是如何泄密的:JSON劫持漏洞攻防原理及演练
  7. Linux应该作为学校基础教育的一部分
  8. 下一阶段的NodeJS:TJ负责Node,NPM可能要收费
  9. 你不知道的JavaScript用法,Hacker是这样写JS的
  10. 女性是否适合创业
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 编程技巧
  1. 停止使用循环,教你用underscore优雅的写代码
  2. 不到30行JS代码实现的Excel表格,jQuery并非不可替代
  3. 如何在网页上隐藏你的Email邮件地址
  4. Ruby己死?NodeJS能否取代Ruby?
  5. 永远不要在Linux执行的10个最危险的命令
  6. 代码审查:写出好的 commit message
  7. 性能测评:Ngix_Lua, Node.JS Python三者性能相当,均比php快近一倍
  8. 技术干货:Nginx 战斗准备 — 优化指南
  9. 高级JavaScript调试—— console.table()
  10. NodeJS on Nginx: 使用nginx反向代理处理静态页面

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号