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 语句。最短的代码并不一定总是最高效的。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Oracle时间日期操作方法小结第1/2页
功能强大,代码简单的管理菜单
网页设计之关于素材和言志
![](https://img.aspxhome.com/file/UploadPic/20083/23/200832313514542s.gif)
菜鸟来看看:制作个人主页有诀窍
成功的用户界面的八个特性[译]
![](https://img.aspxhome.com/file/UploadPic/20094/20/01-77s.jpg)
ORACLE客户端连接服务器的注意事项
如何使数据库的ID字段自动加1?
想用户所想(感受亚马逊的设计)
![](https://img.aspxhome.com/file/UploadPic/20078/26/2007826171322368s.gif)
编写SQL需要注意的细节Checklist总结
导航设计的流行趋势
![](https://img.aspxhome.com/file/UploadPic/200712/25/2007122512955218s.jpg)
可以实现在同一页面里的用多按钮进行提交吗?
Web 设计:实现干净代码的12条定律
![](https://img.aspxhome.com/file/UploadPic/200812/4/22008111521256-30.gif)
高性能表现的网站(译)
![](https://img.aspxhome.com/file/UploadPic/20088/31/2008831203229237s.gif)
从开发人员角度看IE8的开发新特性
ASP编程入门进阶教程
![](https://img.aspxhome.com/file/UploadPic/20086/29/2008629183150594s.jpg)