Fastest way to build an HTML string(拼装html字符串的最快方法)


Posted in Javascript onAugust 20, 2011

Fastest way to build an HTML stringPosted in 'Code Snippets, JavaScript' by James on May 29th, 2009
原文:http://james.padolsey.com/javascript/fastest-way-to-build-an-html-string/

var arr = ['item 1', 'item 2', 'item 3', ...], 
list = ''; 
for (var i = 0, l = arr.length; i < l; i++) { 
list += '<li>' + arr + '</li>'; 
} 
list = '<ul>' + list + '</ul>';//最低效的方式。 
var arr = ['item 1', 'item 2', 'item 3', ...], list = [];for (var i = 0, l = arr.length; i < l; i++) { list[list.length] = '<li>' + arr + '</li>';}list = '<ul>' + list.join('') + '</ul>';;//比上一种的方式快。 var arr = ['item 1', 'item 2', 'item 3', ...];var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';//最优的方式。

执行1000 次:"String concat"
(ms)
"Array pushing"
(ms)
"Native join()"
(ms)
Firefox 314714865Opera 917212578IE 7500229779Chrome 2638872Safari 4b14614160Averages20555970
只有chrome比较特别,第一种方法反而是最快的。

中文翻译版本
第一种:逐个字符串相加

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

这种最常见的,但是效率最低!代码逻辑相对来说复杂。
第二种:逐个 push 进数组
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] + ''; 
} 
list = '<ul>' + list.join('') + '</ul>';

比上一种方法稍微快一些,但还是不够好…
第三种:直接join()
var arr = ['item 1', 'item 2', 'item 3', ...]; 
var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';

使用原生的方法(比如 join()),不管它后面是怎么实现的,一般都比其他方法快很多,而且代码非常简洁。

使用原生的方法(比如 join()),不管它后面是怎么实现的,一般都比其他方法快很多,而且代码非常简洁。

浏览器性能

每种方法是使用一个长度为 130 的数组来测试,其中每个元素的长度是多种多样的,防止浏览器对一定长度的字符串做特殊的优化;每种方法测试了 1000 次;下面的结果显示,执行完这 1000 次需要的时间:

Fastest way to build an HTML string(拼装html字符串的最快方法)

Javascript 相关文章推荐
不用ajax实现点击文字即可编辑的方法
Dec 16 Javascript
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
Jul 29 Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
JavaScript 事件对象介绍
Apr 13 Javascript
Underscore.js 1.3.3 中文注释翻译说明
Jun 25 Javascript
JavaScript获取ul中li个数的方法
Feb 13 Javascript
Bootstrap3多级下拉菜单
Feb 24 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
Vue引入sass并配置全局变量的方法
Jun 27 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
js实现炫酷光感效果
Sep 05 Javascript
jQuery最佳实践完整篇
Aug 20 #Javascript
jQuery的deferred对象使用详解
Aug 20 #Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 #Javascript
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 #Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
Aug 15 #Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 #Javascript
理清apply(),call()的区别和关系
Aug 14 #Javascript
You might like
模仿OSO的论坛(四)
2006/10/09 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
javascript操作数组详解
2014/12/17 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python reduce 函数使用详解
2017/12/05 Python
python实现百度语音识别api
2018/04/10 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
python 怎样进行内存管理
2020/11/10 Python
销售员自我评价怎么写
2013/09/19 职场文书
大四学生毕业自荐信
2013/11/07 职场文书
大学生职业生涯规划书范文
2014/01/04 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
物业保安员岗位职责
2014/03/14 职场文书
新文化运动的口号
2014/06/21 职场文书
社区两委对照检查材料
2014/08/23 职场文书
教师节老师寄语
2015/05/28 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers