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 语句。最短的代码并不一定总是最高效的。

标签:程序,javascript,优化
0
投稿

猜你喜欢

  • Oracle时间日期操作方法小结第1/2页

    2010-11-29 19:40:00
  • 功能强大,代码简单的管理菜单

    2008-07-11 16:52:00
  • 网页设计之关于素材和言志

    2008-03-23 13:46:00
  • 菜鸟来看看:制作个人主页有诀窍

    2007-10-05 09:03:00
  • 成功的用户界面的八个特性[译]

    2009-04-20 20:36:00
  • ORACLE客户端连接服务器的注意事项

    2007-08-17 09:57:00
  • 如何使数据库的ID字段自动加1?

    2010-06-03 10:47:00
  • 想用户所想(感受亚马逊的设计)

    2007-08-26 17:09:00
  • 编写SQL需要注意的细节Checklist总结

    2012-10-07 10:43:57
  • 导航设计的流行趋势

    2007-12-25 12:06:00
  • 可以实现在同一页面里的用多按钮进行提交吗?

    2009-11-01 18:04:00
  • Web 设计:实现干净代码的12条定律

    2008-12-04 13:27:00
  • 高性能表现的网站(译)

    2008-08-31 20:26:00
  • 从开发人员角度看IE8的开发新特性

    2010-02-26 10:48:00
  • ASP编程入门进阶教程

    2008-06-29 18:00:00
  • SQL Server 2005数据库中表的递归查询

    2009-01-08 16:08:00
  • 从Web查询数据库之PHP与MySQL篇

    2009-09-19 16:58:00
  • 获取 Textarea 的光标位置

    2010-11-30 21:33:00
  • windows 7安装ORACLE 10g客户端的方法分享

    2012-07-11 15:36:18
  • SQL Server中单引号的两种处理技巧

    2008-05-23 13:30:00
  • asp之家 网络编程 m.aspxhome.com