JavaScript性能优化 创建文档碎片(document.createDocumentFragment)


Posted in Javascript onJuly 13, 2010

在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于少量的更新,一条条循环插入也会运行很好,也是我们常用的方法。代码如下:

for(var i=0;i<5;i++){ 
var op = document.createElement("span"); 
var oText = document.createTextNode(i); 
op.appendChild(oText); 
document.body.appendChild(op); 
}

但是,如果当我们要向document中添加大量数据时(比如1w条),如果像上面的代码一样,逐条添加节点,这个过程就可能会十分缓慢。
为了解决这个问题,我们可以引入createDocumentFragment()方法,它的作用是创建一个文档碎片,把要插入的新节点先附加在它上面,然后再一次性添加到document中。代码如下:
var oFragmeng = document.createDocumentFragment(); //先创建文档碎片 
for(var i=0;i<10000;i++){ 
var op = document.createElement("span"); 
var oText = document.createTextNode(i); 
op.appendChild(oText); 
oFragmeng.appendChild(op); //先附加在文档碎片中 
} 
document.body.appendChild(oFragmeng);//最后一次性添加到document中

经过测试,在ie,firefox下性能明显得以提高。大家可以自己测试下。
前端性能优化都是从一些细节地方做起的,如果不加以注意,后果很严重。

PS:这个优化跟循环添加html代码有点类似。

Javascript 相关文章推荐
jquery 选择器部分整理
Oct 28 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
js实现翻页后保持checkbox选中状态的实现方法
Nov 03 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
jQuery实现不断闪烁文字的方法
May 15 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
Dec 04 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
Dec 15 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
Nov 03 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 #Javascript
jQuery.Autocomplete实现自动完成功能(详解)
Jul 13 #Javascript
javascript中字符串拼接需注意的问题
Jul 13 #Javascript
转换json格式的日期为Javascript对象的函数
Jul 13 #Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 #Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 #Javascript
不同浏览器的怪癖小结
Jul 11 #Javascript
You might like
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
PHP如何实现跨域
2016/05/30 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
理解JS绑定事件
2016/01/19 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python中类的继承代码实例
2014/10/28 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
特步官方商城:Xtep
2017/03/21 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
《灯光》教学反思
2014/02/08 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
廉洁自律承诺书
2014/03/27 职场文书
优秀护士演讲稿
2014/04/30 职场文书
会计试用期自我评价
2014/09/19 职场文书
2016入党心得体会范文
2016/01/06 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python