javascript 常用优化方法
对于Javascript的代码速度,我们一般可以将它分为下载时间和执行速度两部分,所以,要做优化的话,我们可以从这两部分来入手。
一、优化代码下载速度
删除代码中的注释、制表符、空格、换行,这样做可以有效减小 js文件的体积。我们可以使用现成的工具来做这件事情,例如我之前介绍过的Google Closure Compiler。 替换变量名,将较长的变量名替换为较短的变量名,以减少js文件体积。这方面,用Google Closure Compiler也可以完成。 替换布尔值。我们知道,对于比较来说,true等于1,false等于0。因此,在脚本中的true、false都可以用1和0来代替,这样可以减少几个字节。 使用数组和对象字面量。例如,定义数组时,使用var o = new []而不使用var o = new Array;定义对象时,使用var o = {}而不使用var o = new Object,它们是完全等价的。<script src=”http://js.phpblog.cn/jquery.js?var=2.0″ type=”text/javascript”></script>
二、优化代码执行时间
for(i=0; i<100; i++) {}
但是,你需要知道,将循环反转后,它的速度将更快:
for(i=100; i>=0; i–) {}
这是因为,使用常数0来做为判断依据速度更快。当然,使用while循环也可以反转(变换成do..while),具体方法,我就在这里不再赘述。
除了反转循环,我们还可以使用循环合并,来进一步提高循环的速度。关于循环合并的具体方法,我在这篇文章里已经介绍过。这里要特别说明的是,while循环也可以合并,方法和反转循环一样,也是使用do…while来替。 使用js的内置方法。例如,我们要计算一个数的阶乘,假如你不知道Math对象有个pow()方法的话,你很可能会自己写一个阶乘计算函数,但是要知道,这样做的效率是远远不如直接调用内置方法Math.pow()的,因为内置方法是用C++或C语言编译过的,速度要远远高于解释运行的js。 字符串连接优化。使用”+”来连接字符串的效率是很差的,尤其表现在一次连接多个字符串时,例如:var s = “a” + “b” + “c” + “d”;
因为此时js内部会进行多次连接操作,从而导致效率的下降。为了避免这个问题,我们可以使用Array.join()方法来代替:
存储常用的值。在js中,访问某个对象的属性,从效率上来说,都是非常昂贵的操作。所以可以将多次用到的值存储到一个变量里。例如,下面这个代码速度较慢:var a = ["a", "b", "c", "d"];
var s = a.join();
o1.style.left = document.body.clientWidth;
o2.style.left = document.body.clientWidth;
而下面的代码速度较快:
在js中,脚本中的语句越少,执行速度越快。基于这个原则,我们可以知道,使用一个var来定义多个变量,要快于多个var定义。例如:var left = document.body.clientWidth;
o1.style.left = left;
o2.style.left = left;
var a = 1, b = 2, c = 3;
要快于:
var a = 1;
var b = 2;
var c = 3;
同样,以下的代码:
var s = a[i++];
要快于:
节约使用DOM。在用js改变页面上任何一个元素的样式时(或者增加删除元素),都会导致浏览器重新渲染页面,这个开销是不小的。因此,在连续多次操作DOM时,我们可以先将所有变化保存到DOM碎片(fragment)中,然后再一次性操作页面DOM。例如:var s = a[i];
i++;
var arrText=["1","2","3","4","5","6","7","8","9","10"];
var oFrag=document.createDocumentFragment();
for(var i=0;i
{
var op=document.createElement(“P”);
var oText=document.createTextNode(arrText[i]);
op.appendChild(oText);
oFrag.appendChild(op);}
document.body.appendChild(oFrag);
以上这些,只是我知道的一些优化方法,当然,js中的优化方法肯定不止这一些,我只能是抛砖引玉,更多的方法,还需要大家一起补充。
转载请注明出处:http://www.phpblog.cn/archives/328