这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
说实话,我是个比较喜欢怀疑权威的人,但是在有些权威的问题一直在我面前闪,闪啊闪,我就开始不怀疑他们了,因为有 10000 个人说这个东西是对的,我就会觉得它的确是对的吧。
然后来看看今天我开始怀疑哪个权威哦家伙了。。。
自从开始学编程,自从接触到数组这个东西,我就一直在不同的地点和不同的时间不断看到有人提醒:在用 for 遍历数组的时候一定要用 for(var i=0,n=arr2.length;i
哦?我们这里不说其他程序语言,而只讨论 js,因为不同的语言,实现可能不同,其他语言是什么情况还要靠大家去探索喽。 其实上面说到的所谓的 "动脑子想想就知道" 也许只是因为大家只是用脑子想了想,而不是仔细想了想或者亲自去试了试。所以现在我们仔细想想,第一种写法真的会比第二种写法快么?arr.length 会耗费很多 cpu 么?不会啊,为什么要耗费 cpu 呢?arr.length 并不是调用了一个方法,而只是读取了一下数组的 length 属性啊,你认为读取原生属性和读取定义的变量,哪个会快呢? 我认为读取 length 会更快,所以我写了个测试来测试自己的想法: 我用了一个我自己的小测试框架,
- var arr = [],
- arr2 = [],
- i = 0
- while (i < 100000) {
- arr.push(i) arr2.push(i) i++
- }
- M.TA.begin("0000");
- for (var i = 0; i < arr.length; i++) {
- arr[i] = arr[i] * arr[i] * arr[i]
- }
- M.TA.end("0000", "for(var i=0;i<arr.length;i++)") M.TA.begin("0001");
- for (var i = 0,
- n = arr2.length; i < n; i++) {
- arr2[i] = arr2[i] * arr2[i] * arr2[i]
- }
- M.TA.end("0001", " for(var i=0,n=arr2.length;i<n;i++)") M.TA.showResult()
当然,这段代码是很变态的,占用了 300 多兆的内存。 结果如下:
chrome
firefox
(在做过 N 种性能测试后发现 firefox 在基础运算上的效率比 chrome 高很多,只是涉及到渲染的就慢很多了)
ie8
(减少了 N 个数量级之后的记过,上述脚本在 ie 里无法运行)
总结:?
其实做这个测试不是为了强调 for(var i=0;i
其实我还是尊敬权威的,所以写到这里的时候我心里仍然提心吊胆,难道是我哪里搞错了么?如果是,大家就当一笑而过吧,如果不是,那我总算写了篇人模狗样的博文了。。。
转载注明:
http://www.html-js.com
来源: http://www.phperz.com/article/17/0717/284803.html