加速Javascript:DOM操作优化
原文:《Speeding
up JavaScript: Working with the DOM》
作者: KeeKim Heng, Google Web Developer
在我们开发互联网富应用(RIA)时,我们经常写一些javascript脚本来修改或者增加页面元素,这些工作最终是DOM——或者说文档对象模
型——来完成的,而我们的实现方式会影响到应用的响应速度。
DOM操作会导致浏览器重解析
(reflow),这是浏览器的一个决定页面元素如何展现的计算过程。直接修改
DOM,修改元素的CSS样式,修改浏览器的窗口大小,都会触发重解析。读取元素的布局属性比如offsetHeithe或者offsetWidth也会
触发重解析。重解析需要花费计算时间,因此重解析触发的越少,应用就会越快。
DOM操作通常要不就是修改已经存在的页面上的元素,要不就是创建新的页面元素。下面的4种优化方案覆盖了修改和创建DOM节点两种方式,帮助你减
少触发浏览器重解析的次数。
方案一:通过CSS类名切换来修改DOM
这个方案让我们可以一次性修改一个元素和它的子元素的多个样式属性而只触发一次重解析。
需求:
(emu注:原文作者写到这里的时候脑子显然短路了一下,把后面的Out-of-the-flow DOM
Manipulation模式要解决的问题给摆到这里来了,不过从示范代码中很容易明白作者真正想描述的问题,因此emu就不照翻原文了)
我们现在需要写一个函数来修改一个超链接的几个样式规则。要实现很简单,把这几个规则对应的属性逐一改了就好了。但是带来的问题是,每修改一个样式
属性,都会导致一次页面的重解析。
view
plain
copy
to clipboard
print
?
function
selectAnchor(element) {
element.style.fontWeight = 'bold'
;
element.style.textDecoration = 'none'
;
element.style.color = '#000'
;
}
function
selectAnchor(element) {
element.style.fontWeight = 'bold';
element.style.textDecoration = 'none';
element.style.color = '#000';
}
解决方案
要解决这个问题,我们可以先创建一个样式名,并且把要修改的样式规则都放到这个类名上,然后我们给超链接添加上这个新类名,就可以实现添加几个样式
规则而只触发一次重解析了。这个模式还有个好处是也实现了表现和逻辑相分离。
view
plain
copy
to clipboard
p
相关文档:
最近在CSDN上有人问,怎么用JS循环26个英文字母,想都没想,写下以下代码
<script type="text/javascript">
<!--
var character = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","X","Y","Z");
for(var i=0;i<25;i++)
{
alert(character[i]);
}
......
《悟透javascript》学习笔记
一、 前言
http://blog.csdn.net/soldierluo/archive/2010/02/25/5326520.aspx
二、 回归简单、基本类型
http://blog.csdn.net/soldierluo/archive/2010/02 ......
String.replace(regexp, replaceText); 这是String类中的replace方法原型
replace方法接受两个参数:
regexp: 正则表达式, 用来在字符串中搜索的规则.
replaceText: 用来替换字符串中匹配正则表达式的子串的字符串
在JavaScript中, 支持正则替换, 正则替换的规则如下:
$$: 原意打印一个$符号
$&: 与规则匹配的整个 ......
对象属性:
document.title //设置文档标题等价于HTML的<title>标签
document.bgColor //设置页面背景色
document.fgCol ......
IE可以调用:
<script type="text/javascript">
// 说明:获取页面上选中的文字
// 整理:http://www.CodeBit.cn
function getSelectedText() {
if (window.getSelection) {
// This technique is the most likel ......