Javascript程序优化
作者:Grace 来源:Grace 时间:2008-06-02 13:12:00
继续我们的 Javascript 优化计划,上期已经做到怎么尽可能的缩小 Javascript 脚本的文件体积便于传输。不过这样做仅仅是不够的,因为 Javascript 代码的速度被分割成两部分:下载时间(取决于文件的大小)和执行速度(取决于代码算法)。
当客户端载入 Javascript 脚本以后,真正的之行速度就取决于代码本身是否最优化了。这篇就是讲述如何优化代码本身的执行速度(听起来非常有技术的样子)。
关注作用域
浏览器中,Javascript 默认的变量范围是 window,也就是全局变量。在 window 中的变量只在页面从浏览器关闭以后才释放。而 Javascript 同时也有局部变量(私有变量)的概念,通常它在容器(比如 function)中执行完毕就会被释放。
所以很容易理解当调用某变量时,解释器就会自下(容器)由上(window)寻找变量,寻找的变量本身也是需要一点时间的。所以,解释器在作用树(《Javascript 高级程序设计》中称为“范围树”)中遍历的范围越短,那么脚本运行就会越快。
本人不擅长施教,下面的代码请自行理解
var country = "China";
function fn1() {
alert(country);
}
function fn2() {
var province = "Zhejiang";
fn1();
}
function fn3() {
var city = "Hangzhou";
fn2();
}
fn3();
使用局部变量
理解了上述的细节以后,接下来就非常可以理解了。使用局部变量可以带来更快的执行速度,因为解释器无需因为搜索变量而离开当前执行范围。同时,局部变量让允许完毕就会被释放,所以它们不会一直占用内存。
这里要注意的是,使用闭包会打破这一规则,详细信息可以参看这里和以前我做的一道题目。
避免使用 with 语句
搜索变量范围越小,运行速度越快,所以就很很容易理解避免使用 with 语句的原因。比如
alert(document.title);
alert(document.body.tagName);
alert(document.location);可以写成
with (document) {
alert(title);
alert(body.tagName);
alert(location);
}
虽然代码缩减的程度,并且也非常的容易理解。但是使用 with 语句的同时,要强制解释器不仅在作用树(范围树)内查找局部变量,还强制检测每个变量及指定的对象,看其是否有此变量或者属性。
因此,最好避免使用 with 语句。最短的代码并不一定总是最高效的。