Javascript中声明变量速度的研究
声明变量到底要不要var
使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误。
如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色。
如果重复使用的一个声明没有一个初始值,那么它不会对原来存在的变量有任何的影响。
没有var声明的变量,是作为全局变量存在的;有var声明的变量,属于局部变量,尤其是在函数内部。并且,经过测试,带var声明比不带var速度要快,比如:”var
a”比”a”具有更快的执行速度。我们有理由推测,局部变量的声明比全局变量的声明效率更高。
直接量与new
变量有好几种类型,但是同一类型的变量创建的方式可能不一样,比如string、Object、Array等这些类型的变量声明或者创建。
经过测试,通过直接量声明的速度明显快于通过new声明的速度,比如”var a={} “比”var a=new Object()”具有更快的执行速度。
局部变量与全局变量
现在笔者来告诉你,函数内尽量多设局部变量,这样即安全又快速,变量操作也更加合理,不会因为函数内胡乱操作全局变量而导致逻辑错误。
写个例子说明下,先建立一个全局变量:var m=1; ,接着我读取这个全局变量1000000次
全局变量:
1 | for(var i=1000000;i--;) |
局部变量:
1 | (function (){ |
执行速度2>1
通过上面测试表明,先将m这个全局变量的值存给局部变量n,在将n赋值给a具有更快的速度。
变量名长度
变量名是自己取的,为了照顾语义和规范,变量名可能稍长,但是注意了,变量名的长度也会影响代码的执行速度。
经过测试,长的变量名声明的执行速度没有短的快,比如”var a=1”比”var
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=1”具有更快的执行速度。
所以,我们在声明变量的时候,尽量缩写一些单词,并记忆一些常见的缩写,以下是缩写示例:
单词 | 缩写 |
---|---|
array(数组) | arr |
string(字符串) | str |
number(数量/数字) | num |
function(函数) | fun |
message(消息/信息) | mes |
userNumber(会员数量) | userNum/uNum |
parentElement(父级节点/父级元素) | parentEle |
returnArray(返回的数组) | returnArr |
优化JS中的条件分支语句
一、将条件分支,按可能性顺序从高到低排列
说明:可以减少解释器对条件的探测次数。
二、在同一条件子的多(>2)条件分支时,使用switch优于if
说明:switch分支选择的效率高于if,在IE下尤为明显。4分支的测试,IE下switch的执行时间约为if的一半。
三、使用三目运算符替代条件分支
使用前:
1 | if (a > b) |
使用后:
1 | num = a > b ? a : b; |
字符串拼接
如果要连接多个字符串,应该少使用+=,如
1 | s+=a; |
应该写成s+=a + b + c;
而如果是收集字符串,比如多次对同一个字符串进行+=操作的话,最好使用一个缓存,使用JavaScript数组来收集,最后使用join方法连接起来
1 | var buf = []; |
数字转成字符串
一般最好用”” + 1来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:
(“” +) > String() > .toString() > new String()
for()语句性能优于for(…in…)语句
避免重复创建函数,避免使用闭包。推荐使用prototype追加方法
使用{}创建对象
使用[]创建数组,如果你不知道数组长度,使用Array#push。当你需要复制数组的时候,请使用Array#slice