乱翻乱教-使用JS输出HTML串最快的方法

日期 : 2009年6月1日 12:11 pm 标签 : - 乱翻乱教 - 代码浅谈 - 评论 : 6 feet 日历 : 1 Jun 2009

无数次滴被丫头说“没更新”,最近刚答辩完,整个人像吃了蓝色小药丸一样,不想动不=。=

最近开始狂啃JS,因为上个月去淘宝UED撞墙了,因为那边的“叔叔”们,一直都强调技术,特别是JS @_@ 。然后就被派遣回来了。

飞鱼:如果你跟我有同样遭遇的话,那么,一起学JS吧 嘎嘎···

得···切如正题。
=========== 华丽的分割线 =============

这文章是james.padolsey那看得,觉得挺有启发的,于是就翻译过来给大伙看看。

使用JS输出HTML串最快的方法

作者:James Padolsey
原文地址:猛击此链接(英文强悍的可以参考原文)
当需要将一大堆数组转换成固定格式的html,以下有几种实现方法。
注意:当然你可以直接手动将数组转换成html,如果那样的话,你就很有前途了^_^

方法一,拼接法

这种写法虽说不是最慢的,但是用的人却是最多的。额,貌似我以前都这么用

var arr = ['item 1', 'item 2', 'item 3', ...],
    list = '';

for (var i = 0, l = arr.length; i < l; i++) {
    list += '<li>' + arr[i] + '</li>';
}

list = '<ul>' + list + '</ul>';

就是使用for循环将每个数组使用字符串拼接起来的意思。

以后千万不要用这种啦,又丑又慢=。=

方法二,堆栈法(我起的名,=。=)

var arr = ['item 1', 'item 2', 'item 3', ...],
    list = [];

for (var i = 0, l = arr.length; i < l; i++) {
    list[list.length] = '<li>' + arr[i] + '</li>';
}

list = '<ul>' + list.join('') + '</ul>';

稍微比拼接法快些,但还不够完美。这次的代码使用了.join 方法 比上一种稍微高级了点,但是还是有万恶的for循环

方法三,圣杯(应该是说最佳办法吧)

var arr = ['item 1', 'item 2', 'item 3', ...];

var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';


看过后面的测试结果,你就会相信我说的,这是最快的方法。当然你也可以最近去测试一下。
作者很有自信,说这方法是最快速的。因为使用了join方法并且去掉了for循环,代码相当简洁,相比我以前老用的方法一,不禁大叫:oh 屎~~

浏览器测试

有图有真相

原文我就不翻译了,我的个人水平有限,从上图可以看出,大部分浏览器在处理以上代码时,第三种方法相对最快,但是chrome浏览器优点变态,估计是他独有的js 引擎在起作用吧。果然BT。

======补充======

原文下面评论提出了些问题:说如果数组里么有东西的话就只输出UL会有问题,说要使用三元式来解决。

哟?不错哎 订阅飞鱼的RSS Feeds 回去慢慢看^_^

您可能还对这些日志感兴趣

该文章已经被摸了944次。 共有 6 条评论

  1. 1. 葉子 2009年6月3日 at 11:21

    悲剧,能不能在写的白话点

    回复

    飞鱼 Reply:

    我去买块豆腐····

    回复

    葉子 Reply:

    据说这种方法“复杂的页面加上标签库,没办法用的”,是不是啊,师傅?教我..嘎嘎

    回复

  2. 2. 葉子 2009年6月3日 at 11:25

    看你小日子混的,甜甜蜜蜜,哪还记得更新啊

    回复

  3. 3. luguo 2009年10月13日 at 16:52

    array push 居然最慢!

    回复

  4. 4. 前端鲜奶传送门 | Web前端两三点 2011年4月29日 at 22:36

    [...] way to build an HTML string,E文不行的点这里。 function social_share(post_id,share){ [...]

发表评论

评论仅支持“a、abbr、strong、em、blockquote、code”几个简单的标签