易截截图软件、单文件、免安装、纯绿色、仅160KB

加速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


相关文档:

加速Javascript:DOM操作优化

原文:《Speeding up JavaScript: Working with the DOM》
作者: KeeKim Heng, Google Web Developer
在我们开发互联网富应用(RIA)时,我们经常写一些javascript脚本来修改或者增加页面元素,这些工作最终是DOM——或者说文档对象模型——来完成的,而我们的实现方式会影响到应用的响应速度。
DO ......

javascript控制flash动画

一、介绍与Flash动画控制有关的javascript函数: 
函数名                              使用          &n ......

JavaScript 表格对象和操作

一。取表格对象
var getTable= document.getElementById("tabHeTong");
 
二。插入行
var oTR = getTable.insertRow();//新增一行
 
三。某行加入列
var oTDa = oTR.insertCell();//新增一列
var oTDb = oTR.insertCell();//新增二列
var oTDc = oTR.insertCell();//新增三列
四。删除行:
getTable. ......

javascript一段时间代码

<SCRIPT language=javaScript>
<!--
now = new Date(),hour = now.getHours()
if(hour < 6){document.write("凌晨好!")}
else if (hour < 9){document.write("早上好!")}
else if (hour < 12){document.write("上午好!")}
else if (hour < 14){document.write("中午好!")}
else if (hour &l ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号