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 相关文章推荐
jquery.validate使用攻略 第五步 正则验证
Jul 01 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 Javascript
如何使Chrome控制台支持多行js模式——意外发现
Jun 13 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
vue.js指令v-for使用及索引获取
Nov 03 Javascript
javascript中mouseenter与mouseover的异同
Jun 06 Javascript
基于vue的短信验证码倒计时demo
Sep 13 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
layui中使用jquery控制radio选中事件的示例代码
Aug 15 jQuery
JavaScript常用工具方法封装
Feb 12 Javascript
jQuery HTML设置内容和属性操作实例分析
May 20 jQuery
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页面间传递参数实例代码
2008/06/05 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
JavaScript知识点整理
2015/12/09 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
详解 javascript对象创建模式
2020/10/30 Javascript
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中常用检测字符串相关函数汇总
2015/04/15 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
护士工作失误检讨书
2014/09/14 职场文书
vue特效之翻牌动画
2022/04/20 Vue.js
使用MybatisPlus打印sql语句
2022/04/22 SQL Server