Javascript for..in vs for loop performance
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript for..in vs for loop performance,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1205字,纯文字阅读大概需要2分钟。
内容图文
我使用kmean算法聚集了大约40000点.在程序的第一个版本中,我像这样编写了欧几里德距离函数
var euclideanDistance = function( p1, p2 ) { // p1.length === p2.length == 3
var sum = 0;
for( var i in p1 ){
sum += Math.pow( p1[i] - p2[i], 2 );
}
return Math.sqrt( sum );
};
整个程序非常缓慢,平均执行时间为7秒.经过一些分析后,我重写了上面这个函数
var euclideanDistance = function( p1, p2 ) { // p1.length === p2.length == 3
var sum = 0;
for( var i = 0; i < p1.length; i++ ) {
sum += Math.pow( p1[i] - p2[i], 2 );
}
return Math.sqrt( sum );
};
现在这些节目平均需要大约400毫秒.由于我编写for循环的方式,这是一个巨大的时间差异.我通常不使用for..in循环数组,但出于某种原因我在编写此函数时使用它.
有人可以解释为什么这两种风格之间存在巨大的性能差异吗?
解决方法:
看看每次迭代中发生的事情有何不同:
for( var i = 0; i < p1.length; i++ )
>检查我是否< p1.length
>逐一递增
非常简单快速.
现在看看每次迭代中发生了什么:
Repeat
- Let P be the name of the next property of obj whose [[Enumerable]] attribute is true. If there is no such property, return (normal, V,
empty).
它必须在可枚举的对象中找到下一个属性.使用您的数组,您知道这可以通过一个简单的整数增量来实现,其中找到下一个可枚举的算法很可能不那么简单,因为它必须处理任意对象及其原型链键.
内容总结
以上是互联网集市为您收集整理的Javascript for..in vs for loop performance全部内容,希望文章能够帮你解决Javascript for..in vs for loop performance所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。