JavaScript性能优化技巧

数字转换成字符串

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

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

避免与null进行比较

由于JavaScript是弱类型的,所以它不会做任何的自动类型检查,所以如果看到与null进行比较的代码,尝试使用以下技术替换:

1、如果值应为一个引用类型,使用instanceof操作符检查其构造函数
2、如果值应为一个基本类型,作用typeof检查其类型
3、如果是希望对象包含某个特定的方法名,则使用typeof操作符确保指定名字的方法存在于对象上

字符串连接

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

s+=a;
s+=b;
s+=c;

应该写成

s+=a + b + c;

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

var buf = [];
for (var i = 0; i < 100; i++) {
	buf.push(i.toString());
}
var all = buf.join("");

各种类型转换

var myVar = "3.14159",
        str = "" + myVar, //  to string  
        i_int = ~ ~myVar,  //  to integer  
        f_float = 1 * myVar,  //  to float  
        b_bool = !!myVar,  /*  to boolean - any string with length and any number except 0 are true */
        array = [myVar];  //  to array

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

多个类型声明

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

插入迭代器

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

使用直接量

var aTest = new Array(); //替换为
var aTest = [];

var aTest = new Object; //替换为
var aTest = {};

var reg = new RegExp(); //替换为
var reg = /../;

//如果要创建具有一些特性的一般对象,也可以使用字面量,如下:
var oFruit = new O;
oFruit.color = "red";
oFruit.name = "apple";
//前面的代码可用对象字面量来改写成这样:
var oFruit = { color: "red", name: "apple" };

缩短否定检测

 if (oTest != '#ff0000') {
	//do something
}
if (oTest != null) {
	//do something
}
if (oTest != false) {
	//do something
}
//虽然这些都正确,但用逻辑非操作符来操作也有同样的效果:
if (!oTest) {
	//do something
}

尽量使用原生方法

switch语句相对if较快

通过将case语句按照最可能到最不可能的顺序进行组织

位运算较快

当进行数字运算时,位运算操作要比任何布尔运算或者算数运算快

巧用||和&&布尔运算符

 function eventHandler(e) {
     if (!e) e = window.event;
      }
      //可以替换为:
      function eventHandler(e) {
          e = e || window.event;
      }
	  
    if (myobj) {
            doSomething(myobj);
      }
	//可以替换为:
	myobj && doSomething(myobj);

每条语句末尾须加分号

在if语句中,即使条件表达式只有一条语句也要用{}把它括起来,以免后续如果添加了语句之后造成逻辑错误

posted @ 2021-06-17 10:04  万般自然  阅读(60)  评论(6编辑  收藏  举报