Web 技术研究所

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

关于字符串惰性连接机制

  今天@kyriosli同学提出了个字符代码数组转字符串的性能问题,发现逐个解析并使用“+=”连的效率居然比String.fromCharCode.apply还高?于是@kennyluck大神出现为吾等解释了其原理,在一些实现中,字符串连接操作会被保留,直到真正用到时才会执行连接。
  本来以为这是v8独有的特性,但是在做了一些测试之后发现,IE和Firefox上也有同样的优化,甚至它们做的更好。
<script>
console.time("init");
var s="";
for(var i=0;i<1E7;i++)s+="x";
var a=s+"1";
var b=s+"2";
console.timeEnd("init");

console.time("s");
[][s]=0;
console.timeEnd("s");

console.time("a");
[][a]=0;
console.timeEnd("a");

console.time("b");
[][b]=0;
console.timeEnd("b");
</script>

  上面的例子中,字符串s是直接通过循环生成的,在这个过程中,里面的字符串连接操作并没有直接被执行。以及后面继续执行字符串连接操作也没有。直到这些连接后的字符串被作为属性名使用时才开始合并,所以第一个s的合并过程是很慢的,因为它是由于前面的循环零碎生成的字符串。之后的ab会稍快,因为它们依赖的s已经被合并,只需要取出合并后的值与其它字符串做一次合并即可。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^