Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

一万行重复代码和一万次的循环哪个快?

  最近在贴吧上看到这个类似“一斤铁和一斤棉花哪个重”的问题,这种问题的答案总是违背直觉的。在C语言之类的编程语言中,一万行重复代码快肯定要比一万次循环快。但是不要忘记JavaScript是脚本语言,它还要负责编译的开销。因此不测试是猜不出结果的。
  一万这个数字对于程序来说太小了,结果不容易观察。我们换个大点的数据来测试
(function(){
  var s=[],t,i;
  for(i=0;i<1E6;i++)
    s.push("void null;");
  s=s.join("\r\n");
  t=new Date;
  eval(s);
  console.log(new Date-t);
})();

(function(){
  var t,i;
  t=new Date;
  eval("for(i=0;i<1E6;i++)void null;");
  console.log(new Date-t);
})();

  很明显的,循环要快的多!这就是因为解析代码所需的开销比循环的迭代开销大的多!还不信?那我们就来测试一下同样的代码量不计入解析时间的测试 (function(){
  var s=[],t,i;
  s.push("t=new Date");
  for(i=0;i<1E6;i++)
    s.push("void null;");
  s.push("console.log(new Date-t)");
  s=s.join("\r\n");
  eval(s);
})();

(function(){
  var s=[],t,i;
  s.push("t=new Date");
  s.push("for(i=0;i<1E6;i++)void null;");
  s.push("console.log(new Date-t)");
  s=s.join("\r\n");
  eval(s);
})();

  看吧,不考虑解析的开销当然是一坨相同代码的效率高。所以,对脚本语言的思考我们要抛开那些编译型语言的常识,结果往往是违背直觉的。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^