优化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 初体验(建议学习jquery)
Apr 25 Javascript
初学js 新节点的创建 删除 的步骤
Jul 04 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
Jan 20 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
微信小程序如何获取openid及用户信息
Jan 26 Javascript
浅谈Node 调试工具入门教程
Mar 20 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 jQuery
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 Javascript
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
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
PHP会话控制实例分析
2016/12/24 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
Javascript中Eval函数的使用
2010/03/23 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python3并发写文件与Python对比
2019/11/20 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python元组拆包实现方法
2021/02/28 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
财务部岗位职责
2013/11/19 职场文书
计算机专业自荐信
2014/05/24 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
初中信息技术教学计划
2015/01/22 职场文书
教育读书笔记
2015/07/02 职场文书