DOM编程(每天有学习一点篇)
每次想到“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编程(每天有学习一点篇)的更多相关文章
- 《JavaScript DOM 编程艺术》 学习笔记
目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...
- 浅谈JavaScript DOM编程艺术读后感和一点总结
最近工作不是很忙就想想想JavaScript的内部组成和一些要点,就是从这本书开始的.对新手来说还好,简单易懂. 简单终结下我重书中学到的一些要点. 下面都是个人学习的要点提取: 1.给自己预留退路, ...
- 《JavaScript DOM编程艺术》学习笔记(一)
这本书是我听说学习前端基础入门书籍,于是就开始看了,大概是从5月10号开始看的吧,一直看到现在,差不多要看完了,书是挺厚的...286页,不过比起JAVASCRIPT权威指南来说还是差多了,权威指南才 ...
- javascript解析引擎(每天有学习一点篇)
======================================================= 有一段时间,经常耳闻web前端的福音,对高性能的V8议论纷纷. 其实对js解析引擎没有深 ...
- 《JavaScript DOM编程艺术》学习笔记(三)
终于要完成这最后一部分了,距离第二部分已经过去五天了,一直想早点写的,但还是拖到今天了………… 34.position属性的和法制:static是position属性的默认值,意思是有关元素将按照它们 ...
- 《JavaScript DOM编程艺术》学习笔记(二)
终于开始接着写我的读书笔记了. 17.DOM有insertBefore方法,但并没有提供insertAfter()方法.不过可利用已有的DOM方法和属性编写此函数: function insertAf ...
- 《Javascript DOM编程艺术》学习笔记 第1-6章
第1章 Javascript简史 Javascript是Netspace公司与Sun公司合作开发的,Javascript 1.0版于1995年推出. 为与微软公司竞争,Netspace公司和Sun公司 ...
- javascript MVC(每天有学习一点篇)
“写的不是代码,是你的思维”,经常觉得自己写的代码“皮粗肉糙”的,看到那些要么精致小巧,要么优雅大方,要么光明磊落的代码时,常常会黯然神伤外加垂涎欲滴. why?(为什么我的代码不能如此..) whe ...
- 《JavaScript DOM 编程艺术》学习成果
(在线演示地址)[http://thqy39.github.io/works/03.Js%20DOM%20website/index.html]
随机推荐
- iOS 视频直播
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- 利用Scrollow写一个下拉刷新
利用scrollView滑动的2个监听方法实现 //滑动结束时候 出发的方法 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView ...
- 2014年5月份第2周51Aspx源码发布详情
Reapter手写分页控件源码 2014-5-12 [VS2010]源码描述:实现repeater控件分页,方便好用,界面设计也很漂亮.数据库是Access,可直接运行.入口是RepeaterTes ...
- 开启PHP exif扩展方法详解
服务器配置说明: 1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号2.在php.ini文件中找到;extension=php_mbstring.dll,去掉 ...
- 关于PCA的几何表示——MATLAB实现
关于PCA的一道练习题.这个折腾了好久...终于做出来像样的图,开始的时候忘记对原始数据标准化,怎么也不对.经过标准化之后,做的图看着还可以,有错误请指出! MATLAB代码PCA.m: clear ...
- linux命令:ln
1.命令介绍: nl用来显示文件的行号并打印出来. 2.命令格式: nl [选项] 文件 3.命令参数: -b :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类 ...
- 12-4mysql 查询
简单查询select * from 表名; 注意:*代表所有); 查询指定列 select 列名,列名 from 表名 修改结果集的列名select 列名 as'',列名 as'' from 表名 条 ...
- zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令
zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh). 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认 ...
- USB协议-USB设备的枚举过程
USB主机在检测到USB设备插入后,就要对设备进行枚举了.为什么要枚举?枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动程序,从而知道设备是什么样的设备,如何进行通信等. ...
- crontab不能正确执行的问题
近期在部署crontab任务的时候,总是遇到在shell中单独执行正常,但是放到crontab定时执行出错的问题.若出现这类场景,九成就是环境变量的问题. 因为我的定制任务,基本上都需要使用sqlpl ...