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
投稿

猜你喜欢

  • GO文件创建及读写操作示例详解

    2024-04-25 13:17:58
  • python使用selenium打开chrome浏览器时带用户登录信息实现过程详解

    2023-07-19 05:00:37
  • django 实现将本地图片存入数据库,并能显示在web上的示例

    2024-01-21 14:39:33
  • python读取xml文件方法解析

    2021-04-25 03:53:45
  • ASP经常用到的函数

    2009-07-06 13:00:00
  • Python2.7+pytesser实现简单验证码的识别方法

    2022-01-18 02:37:33
  • 使用numpngw和matplotlib生成png动画的示例代码

    2023-06-15 13:38:21
  • Java生成日期时间存入Mysql数据库的实现方法

    2024-01-13 03:49:08
  • [译]开发人员经常犯的8个设计错误

    2008-02-01 12:28:00
  • 如何让新页面在新窗口打开?

    2009-04-12 19:41:00
  • asp小偷程序原理和简单示例

    2007-11-05 17:12:00
  • Facebook:产品设计评价体系解密

    2011-05-24 17:13:00
  • Python编程之变量赋值操作实例分析

    2021-09-20 12:12:01
  • MySQL存储过程中的sql_mode问题

    2011-01-04 19:50:00
  • 使用python搭建Django应用程序步骤及版本冲突问题解决

    2023-01-29 07:36:34
  • 解决Can't find variable: SockJS vue项目的问题

    2024-04-27 16:07:50
  • numpy系列之数组重塑的实现

    2022-10-20 13:36:35
  • SQL Server 2005数据库批量更新解决办法

    2009-04-11 16:12:00
  • 详解Python自动化之文件自动化处理

    2022-07-24 03:50:02
  • mysql5.58的编译安装

    2011-01-29 16:26:00
  • asp之家 网络编程 m.aspxhome.com