优化innerHTML操作(提高代码执行效率)


Posted in Javascript onAugust 20, 2011

例子:我们要实现的效果是当用户点击鼠标的时候,就在旧数据上追加若干新数据。

如果使用标准DOM的话,完整代码如下:

<html> 
<head> 
<title>test</title> 
</head> 
<body> 
<div> 
<p>data<p> 
</div> 
<script> 
document.onmousedown = function() { 
for (var i = 0; i < 10; i++) { 
var p = document.createElement("p"); 
p.appendChild(document.createTextNode(Math.random())); 
document.getElementsByTagName('div')[0].appendChild(p); 
} 
}; 
</script> 
</body> 
</html>

注:一旦结构比较复杂的话,标准DOM需要编写冗长的代码。

如果使用innerHTML的话,部分代码如下:

<script> 
document.onmousedown = function() { 
var html = ""; 
for (var i = 0; i < 10; i++) { 
html += "<p>" + Math.random() + "<p>"; 
} 
document.getElementsByTagName('div')[0].innerHTML += html; 
}; 
</script>

注:innerHTML没有标准DOM中的appendChild,所以使用了『+=』的方式,效率低下。

我们可以结合使用innerHTML和标准DOM,这样二者的优点就兼得了,部分代码如下:

<script> 
document.onmousedown = function() { 
var html = ""; 
for (var i = 0; i < 10; i++) { 
html += "<p>" + Math.random() + "<p>"; 
} 
var temp = document.createElement("div"); 
temp.innerHTML = html; 
while (temp.firstChild) { 
document.getElementsByTagName('div')[0].appendChild(temp.firstChild); 
} 
}; 
</script>

注:创建一个元素,然后注入innerHTML,接着在元素上使用标准DOM操作。

还不算完,Asynchronous innerHTML给出了更强悍的解决方法,部分代码如下:

<script> 
document.onmousedown = function() { 
var html = ""; 
for (var i = 0; i < 10; i++) { 
html += "<p>" + Math.random() + "<p>"; 
} 
var temp = document.createElement('div'); 
temp.innerHTML = html; 
var frag = document.createDocumentFragment(); 
(function() { 
if (temp.firstChild) { 
frag.appendChild(temp.firstChild); 
setTimeout(arguments.callee, 0); 
} else { 
document.getElementsByTagName('div')[0].appendChild(frag); 
} 
})(); 
}; 
</script>

注:使用setTimeout防止堵塞浏览器,使用DocumentFragment减少渲染次数。

另:代码在拼接字符串时还可以更快,详见:Fastest way to build an HTML string。

Javascript 相关文章推荐
jQuery MD5加密实现代码
Mar 15 Javascript
Ext GridPanel加载完数据后进行操作示例代码
Jun 17 Javascript
判断浏览器的内核及版本号方法汇总
Jan 05 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
JavaScript交换两个变量值的七种解决方案
Dec 01 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 Javascript
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
js中将URL中的参数提取出来作为对象的实现代码
Aug 16 #Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
Aug 15 #Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 #Javascript
理清apply(),call()的区别和关系
Aug 14 #Javascript
纯JS实现的批量图片预览加载功能
Aug 14 #Javascript
javascript中关于执行环境的杂谈
Aug 14 #Javascript
js中字符替换函数String.replace()使用技巧
Aug 14 #Javascript
You might like
linux下为php添加curl扩展的方法
2011/07/29 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
语义化 H1 标签
2008/01/14 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python魔术方法详解
2015/02/14 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
倡议书格式范文
2014/04/14 职场文书
高中生毕业评语
2014/12/30 职场文书
2015年母亲节寄语
2015/03/23 职场文书
初中英语教学反思范文
2016/02/15 职场文书
《活见鬼》教学反思
2016/02/24 职场文书