Javascript程序优化(4)
作者:Grace 来源:Grace 发布时间:2008-06-02 13:12:00
DOM 操作
节约 DOM 操作
Javascript 对 DOM 的处理,可能是最耗费时间的操作之一。每次 Javascript 对 DOM 的操作,浏览器都会改变页面的表现、重新渲染页面,从而有明显的时间损耗。比较环保的做法就是尽可能不在 DOM 中进行 DOM 操作。
请看下面的例子,为 ul 添加 10 个条目
var oUl = document.getElementById("ulItem");
for (var i = 0; i < 10; i++) {
var oLi = document.createElement("li");
oUl.appendChild(oLi);
oLi.appendChild(document.createTextNode("Item " + i);
}
乍看起来似乎无懈可击,但是这段代码的确有问题。首先是循环中的 oUl.appendChild(oLi); 的调用,每次执行过后浏览器就会重新渲染页面;其次,给列表添加添加文本节点(oLi.appendChind(document.createTextNode("Item " + i);),也这会造成页面重新渲染。每次运行都会造成两次页面重新渲染,总计 20 次。
要解决这个问题就如上面所言的,减少 DOM 操作,将列表项目在添加好文本节点以后再添加。下面的代码就可以与上述的代码完成同样的任务。
var oUl = document.getElementById("ulItem");
var oTemp = document.createDocumentFragment();
for (var i = 0; i < 10; i++) {
var oLi = document.createElement("li");
oLi.appendChild(document.createTextNode("Item " + i);
oTemp.appendChild(oLi);
}
oUl.appendChild(oTemp);
遵循标准的 DOM
说点书中没有的(照本宣科完毕),Javascript 其实在寻找节点(Node)也会花上一段时间。对 Web 标准友好的 (x)html 文档相对杂乱文章的页面来说,Javascript 执行速度两者也会有所差别。
浏览器处理页面有模式之分,这也许也是为什么要编写遵循 Web 标准的页面的原因之一。具体信息可以参考这里和一些言论。
缓存 Ajax
Ajax 虽然提供了页面异步请求调用,但别忘记了它还是访问服务器的。Javascript 作为驱动层本身可以作为缓存使用,虽然在页面重新载入后就会被释放,但对于服务器而言这是一个好的消息。
结束语
不知不觉就写了那么多,很多东西都是书上照本宣科的。《Javascript 高级程序设计》的确是一本不可多得的好书,建议大家有机会都可以去看看。这本书不贵,59 RMB(可能在别的地方还有打折),对于烟民而言也就一条双精度红喜,不过它可比香烟所能带来的快感多得多。


猜你喜欢
- SQL Server创建临时表:创建临时表 方法一: &n
- 前言目前在做vue的项目,用到了子组件依赖其父组件的数据,进行子组件的相关请求和页面数据展示,父组件渲染需要子组件通知更新父组件的state
- 引言with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ im
- 锁机制NOLOCK和READPAST的区别。1. 开启一个事务执行插
- 词云图是将词汇按照频率的高低显示不同大小而形成的图,可以一目了然地看出关键词。下面是词云图的python代码~#导入需要模块import j
- 1.OpenCV下载 首先创建一个空的文件夹,进入文件夹执行如下命令,如我创建的文件夹是opencv-pythoncd opencv-pyt
- 一、基于socket实现的TCP客户端import socket # 建立socket对象# 参数一表示IP地址类型(AF_INE
- 今天一个项目上需要,修改了一些属性,测试成功。<!--#include file="conn.asp"-
- 1.单独使用Pillow包时,图片会弹出新窗口显示:from Pillow import Imageimg = Image.open(
- 1 Video介绍引用我翻译文档《在HTML5页面中嵌入音频和视频》中的介绍文字:“当今,在网页上嵌入视频且所有用户不管使用任何浏览器或者操
- 本文实例讲述了Python实现的统计文章单词次数功能。分享给大家供大家参考,具体如下:题目是这样的:你有一个目录,放了你一个月的日记,都是
- 例子是输出九九乘法表如果按照如下程序写:# 输出九九乘法表 for i in range(10): for j in range
- 如下所示:import urllibimport urllib2 import osimport timeimport re import
- Map 类型先看例子 m1:func main() { m := make(map[int]int) mdMap(m) fmt.Printl
- 本文实例讲述了python排序方法。分享给大家供大家参考。具体如下:>>> def my_key1(x):... &nbs
- PyQt5信号与槽高级自定义信号与槽所谓高级自定义信号与槽,指的就是我们可以以自己喜欢的方式定义信号与槽函数,并传递参数,自定义信号的一般流
- 主要代码如下: total = application("All
- 本文实例为大家分享了php bootstrap实现简单登录的方法,供大家参考,具体内容如下所有文件 记住是获取name键值对 from 里面
- 目录HDFS NameNode 高可用Hadoop Namenode 高可用架构Namenode 高可用的实现隔离(Fencing)QJM共
- 如果你想进一步了解如何用JavaScript来为网页添加交互性的话,你也许已经听过JavaScript的事件代理(event delegat