易截截图软件、单文件、免安装、纯绿色、仅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就不照翻原文了)
我们现在需要写一个函数来修改一个超链接的几个样式规则。要实现很简单,把这几个规则对应的属性逐一改了就好了。但是带来的问题是,每修改一个样式属性,都会导致一次页面的重解析。
function selectAnchor(element) {
element.style.fontWeight = 'bold';
element.style.textDecoration = 'none';
element.style.color = '#000';
}
解决方案
要解决这个问题,我们可以先创建一个样式名,并且把要修改的样式规则都放到这个类名上,然后我们给超链接添加上这个新类名,就可以实现添加几个样式规则而只触发一次重解析了。这个模式还有个好处是也实现了表现和逻辑相分离。
.selectedAnchor {
font-weight: bold;
text-decoration: none;
color: #000;
}
function selectAnchor(element) {
element.className = 'selectedAnchor';
}
 方案二:在非渲染区修改DOM
(emu注:作者在这里再次脑子短路,把DocumentFragment DOM Generation模式的介绍提前到这里来了,emu只好再次发挥一下)
上一个方案解决的是修改一个超链接的问题,当一次需要对很多个超链接进行相同修改


相关文档:

JavaScript进行GET和POST请求

JavaScript进行GET和POST请求
Web上最常见的请求就是GET请求.每次在浏览器中输入URL并打开也米纳市,就是在向服务器发送一个GET请求.
GET请求:
GET请求的参数使用问号追加到URL的结尾,后米纳给这用&好连接起来的名称/值.例如:
http://www.somewhere.com/page.php?name1=value1&name2=value2&name3=value3
......

javaScript关闭浏览器 (不弹出提示框)

一段JavaScript脚本程序,负责关闭窗口,如果网页不是通过脚本程序打开的(window.open()),调用window.close()脚本关闭窗口前,必须先将window.opener对象置为null,否则浏览器(IE7、IE8)会弹出一个确定关闭的对话框。
<script language="javaScript">
function closeWindow()
{
 window.opener = null;
 w ......

JavaScript 判断文件是否存在

1. 客户端 //主要针对本地IE浏览器访问
<script
language="javascript">
function FileExist()
{
     var sfso=new
ActiveXObject("Scripting.FileSystemObject");
     var fPath="[The path of the
file]";
     if(sfso.FileExists(fP ......

Firefox 最新 JavaScript 引擎初探

自从 Google 推出含 V8 JavaScript 引擎的 Chrome 以来,公众对 JavaScript
引擎执行效率的胃口又一次被提高,众多浏览器的开发者们绞尽脑汁提升他们的 JavaScript 性能,Opera 最新的10.50 版的 Carakan

引擎据称已经超过 V8,而 Firefox 的开发者们也不甘示弱。
最近升级到 Firefox 3.6 的用户已经发现他们的 Java ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号