从压缩角度,看字符串拼装的最高效方法
老话题了,直接看代码:
// 方式A:直接采用多行写法
var a = '\
<div class="kissy-toolbar-button" title="{TITLE}">\
<div class="kissy-toolbar-button-outer-box">\
<div class="kissy-toolbar-button-inner-box">\
<span class="kissy-toolbar-{NAME}">{TEXT}</span>\
</div>\
</div>\
</div>';
// 方式B:用+号
var b = '<div class="kissy-toolbar-button" title="{TITLE}">' +
'<div class="kissy-toolbar-button-outer-box">' +
'<div class="kissy-toolbar-button-inner-box">' +
'<span class="kissy-toolbar-{NAME}">{TEXT}</span>' +
'</div>' +
'</div>' +
'</div>';
// 方式C:用数组join
var c = ['<div class="kissy-toolbar-button" title="{TITLE}">',
'<div class="kissy-toolbar-button-outer-box">',
'<div class="kissy-toolbar-button-inner-box">',
'<span class="kissy-toolbar-{NAME}">{TEXT}</span>',
'</div>',
'</div>',
'</div>'].join('');
考虑用 YUICompressor 压缩后的代码:test-min.js
很明显,对于纯排版美化的字符串连接来说,无论从性能还是压缩量上看,方式 B 都是最优的。

July 24th, 2009 on 9:37
好文好沙发。:-)
July 24th, 2009 on 10:00
运行效率也是B最高吧
July 24th, 2009 on 10:04
根据 http://www.sitepen.com/blog/2008/05/09/string-performance-an-analysis/ ,Firefox 和 IE 的 + 拼装性能很低。还是建议用 join.
July 24th, 2009 on 10:17
对于大文本多次变量拼接的情况,数组方式应该是运行效率较高的。
July 24th, 2009 on 10:30
之前看的文章一直说大字符串的拼接最好用数组join吗,就像c#里面的StringBuilder.
http://james.padolsey.com/javascript/fastest-way-to-build-an-html-string/
July 24th, 2009 on 10:38
可能我忘了强调:“从压缩角度”
YUICompressor 可以把 var t = “a” + “b”; 直接压缩成 var t = “ab”; 因此性能和压缩量都最好。
July 24th, 2009 on 11:35
嘎嘎,又学到了一点,原来YUICompressor这样来压缩的呀,一直只知道用,从没挖掘过背后的一些机制,顶!
July 24th, 2009 on 11:36
这个要顶一下,每种优化方案都有其使用范围,而前端的工作特点往往更需要考虑几种步骤的综合结果。有了压缩,方式B不仅仅性能和压缩量最好,而源码本身也更易于编写、理解和维护。一举多得啊。
July 24th, 2009 on 11:41
@怿飞:看看http://www.slideshare.net/nzakas/extreme-javascript-compression-with-yui-compressor 这个,不仅仅能让你的代码压缩更小,也能提升代码的效率,很多都是相同的。强语言的效率是通过编译工具解决,JS这方面的工具也正在成长。
July 24th, 2009 on 11:52
相信我,第三中方式是速度最快的,而且比的一种方式快很多!
July 24th, 2009 on 11:53
当然这种方式是指纯粹的字符串直接量的瓶装,如果有变量的话,还是Array.join(”)好。
July 24th, 2009 on 12:48
同意秦歌的论点,纯字符串拼接,方式B最优。
July 26th, 2009 on 15:40
java c#告诉我们,字符串+每次都会生成新实例…所以Array效率最高
不过俺常常用B方法…
July 28th, 2009 on 17:52
firefox 等好像对 + 字符串优化了吧
看ext-core 的源码里 特殊判断 ie 的话 用 join 否则用 +
不知道为什么
leave a reply