优化几个JS

win8youhua

避免全局查找

在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些

view sourceprint?
01.function search() {
02.//当我要使用当前页面地址和主机域名
03.alert(window.location.href + window.location.host);
04.}
05.//最好的方式是如下这样  先用一个简单变量保存起来
06.function search() {
07.var location = window.location;
08.alert(location.href + location.host);
09.}

定时器

如果针对的是不断运行的代码,不应该使用setTimeout,而应该是用setInterval,因为setTimeout每一次都会初始化一个定时器,而setInterval只会在开始的时候初始化一个定时器

view sourceprint?
01.var timeoutTimes = 0;
02.function timeout() {
03.timeoutTimes++;
04.if (timeoutTimes < 10) {
05.setTimeout(timeout, 10);
06.}
07.}
08.timeout();
09.//可以替换为:
10.var intervalTimes = 0;
11.function interval() {
12.intervalTimes++;
13.if (intervalTimes >= 10) {
14.clearInterval(interv);
15.}
16.}
17.var interv = setInterval(interval, 10);

字符串连接

如果要连接多个字符串,应该少使用+=,如

s+=a;

s+=b;

s+=c;

应该写成s+=a + b + c;

而如果是收集字符串,比如多次对同一个字符串进行+=操作的话,最好使用一个缓存,使用JavaScript数组来收集,最后使用join方法连接起来

view sourceprint?
1.var buf = [];
2.for (var i = 0; i < 100; i++) {
3.buf.push(i.toString());
4.}
5.var all = buf.join('');

避免with语句

和函数类似 ,with语句会创建自己的作用域,因此会增加其中执行的代码的作用域链的长度,由于额外的作用域链的查找,在with语句中执行的代码肯定会比外面执行的代码要慢,在能不使用with语句的时候尽量不要使用with语句

view sourceprint?
1.with (a.b.c.d) {
2.property1 = 1;
3.property2 = 2;
4.}
5.//可以替换为:
6.var obj = a.b.c.d;
7.obj.property1 = 1;
8.obj.property2 = 2;

数字转换成字符串

般最好用” + 1来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:

(” +) > String() > .toString() > new String()

浮点数转换成整型

很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()

各种类型转换

view sourceprint?
1.var myVar = '3.14159',
2.str = '' + myVar, //  to string 
3.i_int = ~ ~myVar,  //  to integer 
4.f_float = 1 * myVar,  //  to float 
5.b_bool = !!myVar,  /*  to boolean - any string with length
6.and any number except 0 are true */
7.array = [myVar];  //  to array

如果定义了toString()方法来进行类型转换的话,推荐显式调用toString(),因为内部的操作在尝试所有可能性之后,会尝试对象的toString()方法尝试能否转化为String,所以直接调用这个方法效率会更高

多个类型声明

在JavaScript中所有变量都可以使用单个var语句来声明,这样就是组合在一起的语句,以减少整个脚本的执行时间,就如上面代码一样,上面代码格式也挺规范,让人一看就明了。

插入迭代器

如var name=values[i]; i++;前面两条语句可以写成var name=values[i++]

使用直接量

view sourceprint?
01.var aTest = new Array(); //替换为
02.var aTest = [];
03.var aTest = new Object; //替换为
04.var aTest = {};
05.var reg = new RegExp(); //替换为
06.var reg = /../;
07.//如果要创建具有一些特性的一般对象,也可以使用字面量,如下:
08.var oFruit = new O;
09.oFruit.color = 'red';
10.oFruit.name = 'apple';
11.//前面的代码可用对象字面量来改写成这样:
12.var oFruit = { color: 'red', name: 'apple' };
未经允许不得转载:左迪自留地 » 优化几个JS
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

微信扫一扫打赏