每次想到“DOM”编程就会自然联想到“性能瓶颈”。我觉得有两部分原因:

1.DOM自己本身操作代价昂贵,因为浏览器通常要求DOM 实现和JavaScript 实现保持相互独立;

2.嘿嘿,本人自身的原因,没有本质全面认识她,没有学习和思考如何高效运用其。

显而见之,我目前可以着手改进第二条呀。。。。

忘了哪位大牛说过的一句话,“轻轻地触摸DOM,并尽量保持在ECMAScript 范围内。”

具体做法:

first:DOM 访问和修改

who?   innerHTML or标准的DOM方法

使用DOM 方法更新页面内容的另一个途径是克隆已有DOM 元素

second:HTML集合(是用于存放DOM 节点引用的类数组对象)

document.getElementsByName()
document.getElementsByClassName()
document.getElementsByTagName_r()

document.images

document.links

document.forms

document.forms[0].elements

HTML 集合是一个“虚拟存在,意味着当底层文档更新时,它们将自动更新”,HTML 集合实际上在查询文档,当你更新信息时,每次都要重复执行这种查询操作,正是低效率的来源。

--------方案

1.将length 缓存一下。

2.先将集合元素拷贝到数组(数组副本,评估是否有意),因为遍历数组比遍历集合快。

3.如果同一个DOM 属性或方法被访问一次以上,最好使用一个局部变量缓存此DOM 成员。

third:抓取DOM

1.用nextSibling 抓取DOM 是首选方法

2.DOM 属性诸如childNode,firstChild,和nextSibling 不区分元素节点和其他类型节点。

元素节点:children

3.函数querySelectorAll()接收一个CSS 选择器字符串参数并返回一个NodeList(由符合条件的节点构成的类数组对象)。此函数不返回
HTML 集合

列浏览器支持选择器API:Internet Explorer 8,Firefox 3.5,Safari 3.1,Chrome 1,Opera 10。

forth: 重绘和重排版

当浏览器下载完所有页面的html标记、javascript、css、图片之后,它解析文件并创建两个内部数据结构

a dom tree(表示页面结构)+ a render tree(表示dom节点如何显示)渲染树上的节点称为“框”或者“盒”。

获取布局信息的操作将导致刷新队列动作:

• offsetTop, offsetLeft, offsetWidth, offsetHeight
• scrollTop, scrollLeft, scrollWidth, scrollHeight
• clientTop, clientLeft, clientWidth, clientHeight
• getComputedStyle() (currentStyle in IE)(在IE 中此函数称为currentStyle)

该将多个DOM 和风格改变合并到一个批次中一次性执行:cssText 属性实现、修改CSS 的类名称

firth:批量修改DOM
1.从文档流中摘除该元素---》对其应用多重改变----》将元素带回文档中

1.1隐藏元素,进行修改,然后再显示它。

1.2使用一个文档片断在已存DOM 之外创建一个子树,然后将它拷贝到文档中。

1.3将原始元素拷贝到一个脱离文档的节点中,修改副本,然后覆盖原始元素。

sixth:事件托管

事件逐层冒泡总能被父元素捕获。采用事件托管技术之后,你只需要在一个包装元素上挂接一个句柄,用于处理子元素发生的所有事件。

DOM编程(每天有学习一点篇)的更多相关文章

  1. 《JavaScript DOM 编程艺术》 学习笔记

    目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...

  2. 浅谈JavaScript DOM编程艺术读后感和一点总结

    最近工作不是很忙就想想想JavaScript的内部组成和一些要点,就是从这本书开始的.对新手来说还好,简单易懂. 简单终结下我重书中学到的一些要点. 下面都是个人学习的要点提取: 1.给自己预留退路, ...

  3. 《JavaScript DOM编程艺术》学习笔记(一)

    这本书是我听说学习前端基础入门书籍,于是就开始看了,大概是从5月10号开始看的吧,一直看到现在,差不多要看完了,书是挺厚的...286页,不过比起JAVASCRIPT权威指南来说还是差多了,权威指南才 ...

  4. javascript解析引擎(每天有学习一点篇)

    ======================================================= 有一段时间,经常耳闻web前端的福音,对高性能的V8议论纷纷. 其实对js解析引擎没有深 ...

  5. 《JavaScript DOM编程艺术》学习笔记(三)

    终于要完成这最后一部分了,距离第二部分已经过去五天了,一直想早点写的,但还是拖到今天了………… 34.position属性的和法制:static是position属性的默认值,意思是有关元素将按照它们 ...

  6. 《JavaScript DOM编程艺术》学习笔记(二)

    终于开始接着写我的读书笔记了. 17.DOM有insertBefore方法,但并没有提供insertAfter()方法.不过可利用已有的DOM方法和属性编写此函数: function insertAf ...

  7. 《Javascript DOM编程艺术》学习笔记 第1-6章

    第1章 Javascript简史 Javascript是Netspace公司与Sun公司合作开发的,Javascript 1.0版于1995年推出. 为与微软公司竞争,Netspace公司和Sun公司 ...

  8. javascript MVC(每天有学习一点篇)

    “写的不是代码,是你的思维”,经常觉得自己写的代码“皮粗肉糙”的,看到那些要么精致小巧,要么优雅大方,要么光明磊落的代码时,常常会黯然神伤外加垂涎欲滴. why?(为什么我的代码不能如此..) whe ...

  9. 《JavaScript DOM 编程艺术》学习成果

    (在线演示地址)[http://thqy39.github.io/works/03.Js%20DOM%20website/index.html]

随机推荐

  1. GPS模块启动模式说明

    1.启动方式 GPS开机定位分为冷启动、温启动和热启动三种:  1、冷启动:以下几种情况开机均属冷启动。初次使用时;电池耗尽导致星历信息丢失时;关机状态下将接收机移动1000公里以上距离。   2、温 ...

  2. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  3. ubuntu下搭建samba服务器

    samba是用于linux和windows下文件共享的协议 首先,更新源并安装samba sudo apt-get update sudo apt-get install samba 然后创建一个共享 ...

  4. Windows Server 2008(R2)配置apache+php+mysql环境问题事项

    服务器环境:Windows 2008 R2 64位.apache,mysql,php都是32位. 1. 80端口的外网访问问题 表现:80端口本地可以访问,外网不能访问,换了8080端口也是一样,检查 ...

  5. [HNOI2008],[bzoj1008] 越狱(dp+组合数学)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人 ...

  6. 黑马程序员——JAVA基础之正则表达式,网络爬虫

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 正则表达式: 概念:用于操作字符串的符合一定规则的表达式 特点:用于一些特定的符号来表示一些代码 ...

  7. 电脑结构和CPU、内存、硬盘三者之间的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  8. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  9. MyEclipse Spring 学习总结二 Bean的生命周期

    文件结构可以参考上一节 Bean的生命周期有方法有:init-method,destroy-method ApplicationContext.xml 文件配置如下: <?xml version ...

  10. 电脑ip(本地ip和本机ip)

    1.localhost:localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 [::1](ipv6) 2.127.0.0.1 ...