javascript-js里操作DOM节点性能损失最低的方式是什么?

问题描述

js里操作DOM节点性能损失最低的方式是什么?

可能这个标题不太合适,如下有个例子,一种是用原生js里的创建节点、文本节点、插入父节点内的方式,一种是用数据格式化字符串的方式

// 方式1:
 var a = document.createElement('a');
 a.href = 'http://www.baidu.com';
 a.target ='_blank';
 var text = document.createTextNode('this is baidu homepage');
 a.appendChild(text);
 document.body.appendChild(a);

 //方式2:
 var data = {
  content: "this is baidu homepage",
    href: "http://www.baidu.com",
    target: "_blank"
 };
 var tpl = '<a href="{#href#}" target="{#target#}">{#content#}</a>';
 var tplEngine = function(data, tpl) {
    return tpl.replace(/{#(w+)#}/g, function(match, key) {
           return typeof data[key] === undefined ? '' : data[key];
        });
 };
 document.body.innerHTML(tplEngine(data,tpl));

1、这两种方式哪种性能损失更低?
2、innerHTML()方法的后台运行原理是什么?是否和js的创建元素、文本节点、插入到父节点三个方法过程等价?

解决方案

innerHTML是属性,不是方法

多个dom插入操作最好是用DocumentFragment,而不是每次都操作document,操作DocumentFragment,最后插入DocumentFragment到dom树

不过最新浏览器优化过,应该性能差不是很大

http://www.zhihu.com/question/27260165

解决方案二:

理论上后者性能高,因为它修改dom的次数更少。
不过最好用react一类的框架。

时间: 2024-11-05 00:37:46

javascript-js里操作DOM节点性能损失最低的方式是什么?的相关文章

JS/jQuery判断DOM节点是否存在的简单方法_javascript技巧

JS原生判断DOM节点是否存在页面中 JavaScript原生函数没有提供判断DOM节点是否存在方法,我们通常获取DOM节点几乎都是document.getElement..方法,会返回一个object数组合集,我们可以通过object[0],object[1]这样来访问这个合集的每一个对象.既然返回的是数组合集,那么就有length属性,而length大于等于1即表示DOM节点存在页面中 代码: Object.prototype.exist = function(){ if(typeof th

Javascript教程:如何操作dom

文章简介:前两章讲了获取DOM元素.这章就开始讲如何操作dom.1.针对页面上有的DOM元素操作,无非就是对这个dom元素的样式进行操作.如果这个DOM元素没有样式也就谈不上操作了.2.我们也可以直接用JS动态的向html里写入DOM元素. 前两章讲了获取DOM元素.这章就开始讲如何操作dom.1.针对页面上有的DOM元素操作,无非就是对这个dom元素的样式进行操作.如果这个DOM元素没有样式也就谈不上操作了.2.我们也可以直接用JS动态的向html里写入DOM元素.今天这章我们就讲这两个应用(

jQuery获取DOM节点实例分析(2种方式)_jquery

本文实例讲述了jQuery获取DOM节点.分享给大家供大家参考,具体如下: jQuery中包裹后的DOM对象实际上是一个数组,要获得纯粹的DOM对象可以有两种方式: 1.使用数组索引方式访问,例如: 复制代码 代码如下: var dom = $(dom)[0]; 2.使用函数get()访问,例如: 复制代码 代码如下: var dom = $(dom).get(0); get()函数中的参数为索引号. 3.示例 var div = document.createElement("DIV"

原生js操作dom节点的学习笔记

今天学习了如何用原生js写dom元素(节点),下面是结合所学文档W3C整理的笔记: 1.添加节点 创建节点:使用createElement创建元素,使用createTextNode创建文本节点 首先是一段html代码,下面的例子都引用这个. <div id="div1"> this is first paragraph this is second paragraph </div> Js部分: //创建一个新的元素 var para=document.creat

Js 获取HTML DOM节点元素的方法小结_javascript技巧

如何获取要更新的元素,是首先要解决的问题.令人欣慰的是,使用JavaScript获取节点的方法有很多种,这里简单做一下总结(以下方法在IE7和Firefox2.0.0.11测试通过)1. 通过顶层document节点获取:          (1) document.getElementById(elementId) :该方法通过节点的ID,可以准确获得需要的元素,是比较简单快捷的方法.如果页面上含有多个相同id的节点,那么只返回第一个节点.             如今,已经出现了如proto

JavaScript操作DOM的那些坑

js在操作DOM中存在着许多跨浏览器方面的坑,本文花了我将近一周的时间整理,我将根据实例整理那些大大小小的"坑". DOM的工作模式是:先加载文档的静态内容.再以动态方式对它们进行刷新,动态刷新不影响文档的静态内容. PS:IE 中的所有 DOM 对象都是以 COM 对象的形式实现的,这意味着 IE 中的 DOM可能会和其他浏览器有一定的差异. Node 接口 firstChild 相当于 childNodes[0];lastChild 相当于childNodes[box.childN

Ajax实战:使用JavaScript操作DOM

在任何应用中,我们都需要在用户的使用过程中改变用户界面,为用户执行 的操作和完成的进度提供反馈.这些反馈包括修改单个元素的标签或颜色.弹出 临时的对话框.使用一组全新的UI组件替换大部分的屏幕内容等等.到目前为止 ,最常见的方式就是,通过提供给浏览器一段声明式的HTML来构造DOM树(换句话 说,也就是编写HTML页面). 我们在代码清单2-2和图2-3中显示的文档有点太大和太复杂了,还是从小的 步骤开始做DOM操作吧.假设我们要向用户显示友好的问候.当页面第一次加载 的时候,我们并不知道他的名

JS操作iframe里的dom的介绍

本篇主要是对JS操作iframe里的dom进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 直接赋值如下代码测试即可明白:   1.html: 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

JavaScript操作HTML DOM节点的基础教程_基础知识

因为 DOM 的存在,这使我们可以通过 JavaScript 来获取.创建.修改.或删除节点. NOTE:下面提供的例子中的 element 均为元素节点.获取节点 父子关系 element.parentNode element.firstChild/element.lastChild element.childNodes/element.children 兄弟关系 element.previousSibling/element.nextSibling element.previousEleme