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 相关文章推荐
一起来写段JS drag拖动代码
Dec 09 Javascript
js事件(Event)知识整理
Oct 11 Javascript
js Dialog 实践分享
Oct 22 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
使用javascript实现Iframe自适应高度
Dec 24 Javascript
JavaScript编程中实现对象封装特性的实例讲解
Jun 24 Javascript
JavaScript基础之this详解
Jun 04 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
Node.js模块全局安装路径配置方法
May 17 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
Oct 20 Javascript
微信小程序实现蒙版弹出窗功能
Sep 17 Javascript
浅析 Vue 3.0 的组装式 API(一)
Aug 31 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工程师VIM配置分享
2015/12/15 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
python的类方法和静态方法
2014/12/13 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
Python多线程获取返回值代码实例
2020/02/17 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
Linux中如何用命令创建目录
2015/01/12 面试题
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
解析Java异步之call future
2021/06/14 Java/Android
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
MySQL 计算连续登录天数
2022/05/11 MySQL