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 相关文章推荐
TopList标签和JavaScript结合两例
Aug 12 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
Jan 15 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
JavaScript中使用数组方法汇总
Feb 16 Javascript
JS验证图片格式和大小并预览的简单实例
Oct 11 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
Angular 5.0 来了! 有这些大变化
Nov 15 Javascript
详解layui中的树形关于取值传值问题
Jan 16 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
Oct 26 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
PHP关联链接常用代码
2012/11/05 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python实现apahce网站日志分析示例
2014/04/02 Python
Python3实现从文件中读取指定行的方法
2015/05/22 Python
Python 中 Meta Classes详解
2016/02/13 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
领导班子自我剖析材料
2014/08/16 职场文书
售房协议书范本2014
2014/10/23 职场文书
安全员岗位职责范本
2015/04/11 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
Pandas数据类型之category的用法
2021/06/28 Python