非常快的JS循环
Incredibly fast JS loop?
今天我有一个想法来检查循环的性能,我称之为"scoped for"。这个想法很简单。这个循环有两个变量,"i"answers"l",它们的定义比循环本身"高一个作用域"。
我已经创建了jsPerf并获得了惊人的结果。http://jsperf.com/variable-scoped-loop/6
我决定创建我的本地测试,结果甚至更好(1000x1000循环的平均时间为5s对于"标准for"和小于0.01s对于"范围for")。
现在我想知道为什么这个循环这么快。我假设这都是关于V8的,但你永远不会知道。
有人愿意解释一下吗?
TLDR:
为什么这个循环这么快?
var loop = ( function() {
var i, l;
return function( length, action ) {
for( i = 0, l = length ; i < l ; ++i ) {
action();
}
};
}() );
不幸的是,这里没有魔法:您的测试是错误的。
对于varInFor
, empty
函数被正确地称为9999^2
次,而对于varInScope
,它只被称为9999
次。这就是为什么它完成得更快。您可以通过让empty
函数打印一些东西来轻松地测试这一点。
原因是变量i
和l
在varInScope
的外部和内部调用之间是共享的。因此,在内部循环结束后,i
已经等于l
,外部循环立即退出。
请参阅另一个JSPerf的固定版本,该版本每次初始化函数(在闭包中创建一组新的变量),它确实比"正常"的for循环慢20% 。
相关文章:
- 合并两个数组,重新调整循环js
- JS(node.js)而循环不起作用
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 如何使用React JS中的循环,根据条件渲染或不渲染表数据
- 两个循环JS函数相互冲突
- 如何在文本字段中循环Js函数和事件
- 如何停止滑块在滑行中再次循环.js
- 循环 JS 变量不会在函数内显示正确的值
- 嵌套在 Node 中的循环.js与 Mocha 测试框架一起
- 在 Node 中连接数组循环.js glob 结果
- 循环 JS 函数,直到满足 if 或 else 条件
- 页面冻结,不要使用循环js移动wihle
- 循环JS中的信用更新
- 什么是循环JS中变量的良好命名形式
- 显示/隐藏循环js问题
- 如何在循环时使用mysql循环Js
- 如何填充数组循环JS
- 成为更多的OO多个For循环JS
- 如何嵌套循环通过关联数组内的索引数组循环(JS)