JS性能优化之文档碎片-document.createDocumentFragment
讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么。
在浏览器中,我们一旦把节点添加到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条),如果像上面的代码一样,逐条添加节点,这个过程就可能会十分缓慢。
当然,你也可以建个新的节点,比如说div,先将oP添加到div上,然后再将div添加到body中.但这样要在body中多添加一个<div></div>.但文档碎片不会产生这种节点.
var oDiv = document.createElement("div"); for(var i=0;i<10000;i++){ var op = document.createElement("span"); var oText = document.createTextNode(i); op.appendChild(oText); oDiv.appendChild(op); } document.body.appendChild(oDiv);
为了解决这个问题,我们可以引入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中 document.body.appendChild(oFragmeng);
经过测试,在ie,firefox下性能明显得以提高。大家可以自己测试下。
前端性能优化都是从一些细节地方做起的,如果不加以注意,后果很严重。
PS:这个优化跟循环添加html代码有点类似。
JS性能优化之文档碎片-document.createDocumentFragment相关推荐
- web前端分享:性能优化之文档碎片处理
有不少同学在前端开发面试的时候会被问到性能优化的相关问题,做好优化是一件非常重要的事情,今天小千就来给大家介绍一下文档碎片的处理方式. 性能优化之文档碎片 一般情况下,在操作DOM结构的时候,经常会说 ...
- JQuery创建文档碎片
(1)文档碎片可以提高DOM的操作性能.比如要插入一万个li标签,如果没有文档碎片,就必须插入一个然后页面渲染一次,插入完全部就要渲染一万次,太损耗性能.利用文档碎片,可以先把需要修改的全部放入文档碎 ...
- 有关文档碎片(document fragment)的用法
通常情况下修改.删除或者增加DOM元素.更新DOM会导致浏览器重新绘制屏幕,也会导 致reflow,这样会带来巨大的开销.我们通常解决这的办法尽量减少更新DOM,这也就意 味着将DOM的改变分批处理, ...
- 我总结的js性能优化的小知识
阅读目录 前言 避免全局查找 定时器 字符串连接 避免with语句 数字转换成字符串 浮点数转换成整型 各种类型转换 多个类型声明 插入迭代器 使用直接量 使用DocumentFragment优化多次 ...
- Node.js性能优化
你不知道的Node.js性能优化 - 知乎 https://zhuanlan.zhihu.com/p/50055740 你不知道的Node.js性能优化 "当我第一次知道要写这篇文章的时候, ...
- html5在线显示word文档,JS实现获取word文档内容并输出显示到html页面示例
本文实例讲述了js实现获取word文档内容并输出显示到html页面.分享给大家供大家参考,具体如下: title var w = new activexobject('word.application ...
- pdf.js在线查看(文档流/地址)
pdf.js在线查看(文档流/地址) 工作中需要在移动端在线查看pdf文件,但由于pdf文件存放在第三方的服务器中,由于各种原因无法直接返回pdf文件地址给前台,后来确定返给前台是一个base64的流 ...
- 【办公常用软件有哪些】万彩办公大师教程丨扫描PDF转优化帮助文档
关于万彩办公大师的扫描PDF转优化工具 扫描PDF转优化工具可以高效地优化扫描的PDF文档.这款工具不仅能使PDF文档中扫描的图像去扭斜,还能快速删除PDF中未使用的空白页.除此之外,可以将扫描的PD ...
- JS实现获取word文档内容并输出显示到html页面示例,和将页面数据写入txt文件
JS实现获取word文档内容并输出显示到html页面示例 注意:这里使用了ActiveXObject组建,因此需要使用IE内核浏览器运行本代码. <!DOCTYPE html> <h ...
最新文章
- 大火的Apache Spark也有诸多不完美
- 设计模式之结构型(4)-桥接模式(Bridge)
- HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVCCORE均适用)
- java跳转html页面_springboot 2.0.8 跳转html页面
- pycharm关闭git
- 服务器配置能连多少个小程序,每个服务器能配置多少小程序
- 简单记录一下做的项目过程中踩过的坑
- linux里命令pkg-config工具的使用
- Spring动态代理的两种区别
- 人工神经网络概念梳理与实例演示
- Result Maps collection does not contain value for错误提示
- [计算机网络]网络层IP协议 选路算法
- 蝴蝶效应(Butterfly effect)[FROM 百度ZD]
- 微信公众号所有文章下载链接获取
- pa皮安级电流检测电路
- 求职经验丨应届毕业生,如何找到一份程序员工作呢?
- Spring------基于xml的DI (一)设值注入、构造注入
- 生产订单工艺路线修改
- Docker下安装MySQL
- 英语单词常用词根(二)
热门文章
- 图论--最短路-- Dijkstra模板(目前见到的最好用的)
- 使用jquery插件报错:TypeError:$.browser is undefined的解决方法
- mapreduce实现计数时未执行reduce方法(未实现统计功能)
- 玩转u-boot之【初探环境变量env/bootcmd/bootargs】
- [机器学习] LightGBM on Spark (MMLSpark) 使用完全手册
- __FUNCTION__, __FILE__, __LINE__ (原)
- 推荐華麗の真実的小说《The★Sakuray》
- 飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署
- python实现多表格合并_用python实现多个表格合并按字段去重
- 入门 | 初学者必读:解读14个深度学习关键词