优化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 相关文章推荐
textarea的value是html文件源代码,存成html文件的代码
Apr 20 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
Mar 12 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
Feb 27 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
jQuery实现简洁的导航菜单效果
Nov 23 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
Vue.js路由vue-router使用方法详解
Mar 20 Javascript
浅谈React + Webpack 构建打包优化
Jan 23 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 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 图片文件上传实现代码
2010/12/29 PHP
destoon官方标签大全
2014/06/20 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
给Function做的OOP扩展
2009/05/07 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
JS解析XML实例分析
2015/01/30 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
layui文件上传实现代码
2017/05/20 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[01:27:43]VGJ.S vs TNC Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
一些常用的Python爬虫技巧汇总
2016/09/28 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Python configparser模块常用方法解析
2020/05/22 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
人事部经理岗位职责
2014/03/07 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server