首页 > 网站 > WEB开发 > 正文

JavaScript代码优化(下载时间和执行速度优化)

2024-04-27 14:21:14
字体:
来源:转载
供稿:网友

javaScript代码优化(下载时间和执行速度优化)

Javascript代码的速度被分成两部分:下载时间和执行速度。

下载时间

Web浏览器下载的是js源码,因此所有长变量名和注释都回包含在内。这个因素会增加下载时间。1160是一个TCP-IP包中的字节数。最好能将每个javascript文件都保持在1160字节以下以获得最优的下载时间。 由于这个原因,要删除注释、删除制表符和空格、删除所有的换行、将长变量名缩短。遵循这4条比较困难。因此用外部程序(ECMAScript Cruncher)来帮助我们。

要运行ESC,必使用Windows系统,打开一个控制台窗口,然后使用以下格式的命令:

cscript ESC.wsf -l [0-4] -ow outputfile.js inputfile1.js [inputfile2.js]

第一部分,cscript,是Windows Shell脚本解释程序。文件名ESC.wsf是ESC的程序本身。然后是压缩级别,一个0到4的数值。-ow选项表示下一个参数是优化后输出的文件名。最后,剩下的参数是要进行优化的JavaScript文件,可以有多个文件(多个文件在优化后后会按顺序放到输出文件中)。

0 —— 不改变脚本,要将多个文件拿到单个文件中时用用。

1 —— 删除所有的注释。

2 —— 除等级1外,再删除额外的制表符和空格。

3 —— 除等级2外,再删除换行。

4 —— 除等级3外,再进行变量名替换。

ESC擅长把变量名替换成无意义的名称,它还具有一定的智能,进行私有对象先进性和方法名的替换(由名称前后加上两个下划线表示),所以私有特性和方法依然保持其私有性。

ESC不会更改构造函数名、公用属性和公用方法名,所以无需担心。但要注意的是如果某个JavaScript引用了另一个文件中的构造函数,4级优化会把对构造函数的引用替换成无意义的名称。解决方法是将两个文件合成一个文件,这样就会保持构造函数的名称。

其他减少字节数的方法还有几个。

1.因为在javascript语言中 true等于1,false等于0。因此,脚本包含的字面变量true都可以用1来替换,而false可以用0来替换。例如:

Js代码收藏代码
  1. varbFound=false;
  2. for(vari=0;i<aTest.length&&!bFound;i++){
  3. if(aTest[i]==vTest){
  4. bFounde=true;
  5. }
  6. }
  7. varbFound=0;
  8. for(vari=0;i<aTest.length&&!bFound;i++){
  9. if(aTest[i]==vTest){
  10. bFounde=1;
  11. }
  12. }

这两段代码运行方式完全相同,而后者节省了7个字节。 2.缩短否定检测 代码中常常会出现检测某个值是否满足条件。而大部分作的判断某个变量是否为undefined 、null 、false。可以用逻辑非来简化判断。例如

Js代码收藏代码
  1. if(oTest!=undefined){
  2. //dosometing
  3. }
  4. if(oTest!=null){
  5. //dosometing
  6. }
  7. if(oTest!=false){
  8. //dosometing
  9. }
Js代码收藏代码

以上代码可以替换成

Js代码收藏代码
  1. if(!oTest){
  2. //dosomething
  3. }

为什么可以替换呢?因为逻辑非操作在遇到undefined 、null 、false时返回true这样做可以节省很多字节。 3.定义数组、对象时候的技巧

Js代码收藏代码
  1. varoTest=newArray;
  2. varoTest=[];
Js代码收藏代码
  1. varoTest=newObject;
  2. varoTest={};

是等价的

执行时间

我们可以做一些简单的事情提高javascript性能。我觉得也是编写javascript的一些技巧。 1.关注范围 书中的范围我理解为作用域。 在javascript中默认的范围是window。在window范围中创建的变量旨在页面从浏览器卸载后才会销毁。在函数中创建的变量只在函数中的范围内有效。函数执行后就销毁。在引用变量时,javascript解释程序在最近的范围内查找,如果没有救灾上一层次中查找。直到window范围。如果window中也找不到。则出现错误。本地范围内的变量比全局变量执行起来要更快。提高javascript执行速度可以有下面几种方法 A.使用局部变量。 在函数中总是用var来定义变量。如果直接使用变量而不在函数中定义,则变量会创建在window范围内。也就是说执行函数遇到该变量时,javascirpt程序就会按层次到最上层才会查找到该变量。不要这样:

Js代码收藏代码
  1. functionxxx(){
  2. name="abc";
  3. alert(name);
  4. }

B. 避免with语句 范围越小执行速度越快。

Js代码收藏代码
  1. alert(document.title);
  2. alert(document.body.tagName);
  3. alert(document.location);

可以替换成

Js代码收藏代码
  1. with(document){
  2. alert(title);
  3. alert(body.tagName);
  4. alert(location);
  5. }

这的确缩短了程序的长度,但是减少代码不能弥补损失的性能。为什么呢?因为:使用with语句时要强制解释程序不仅要在范围内查找局部变量。还强制检测每个变量及指定的对象,看其是否为特性。因为也可以在函数中定义变量title或者location。

2.Javascript陷阱

A. 避免多字符串用+号连接 多字符串连接最好用StringBuffer对象。该对象封装了Array用join()方法进行连接字符串。 B.优先使用内置方法Js提供了相当丰富的内置方法可以充分利用 C.存储常用的值多次使用同一个值时,可以将其存储在局部变量中提高访问速度。

3.减少语句数量 例如:

Js代码收藏代码

  1. variFive=5;
  2. varsColor="blue";

可以替换成

Js代码收藏代码
  1. variFive=5,sColor="blue";
  2. //另外
  3. varsName=aValues[i];
  4. i++;
  5. //可以替换成
  6. varsName=aValues[i++];

另外可以用json来代替对象定义。

4.节约使用DOM

DOM处理算是javascript中最耗时的操作之一。解决这个问题的方法是尽可能避免对DOM文档中的元素直接进行DOM操作。这里要学会使用文档碎片对象即document.createDocumentFragment()。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表