编写高效的JavaScript

一.最快的条件判断

if语句的适用场景

  • 2个之内的离散值需要判断

  • 大量的值能容易的分到不同的区间范围中

switch语句的适用场景

  • 超过2个少于10个离散值需要判断

  • 条件值是非线性的,无法分离出区间范围

数组查询的适用场景

  • 超过10个值需要判断

  • 条件对应的结果是单一值,而不是一系列操作

二.字符串操作

字符串连接

现代浏览器已经对字符串做了优化,如果字符串较短(少于20个字符)且数量较少(少于1000个),所有浏览器都能用+运算符在1ms内完成

所以,用push + join优化字符串连接已经没有必要了,在大多数场景下,直接+就好了

裁剪字符串

ES5提供了原生的trim,如果环境中没有,可以使用下面这个最快的trim实现:

function trim(text) {
    text = text.replace(/^\s+/, '');
    for (var i = text.length - 1; i >= 0; i--) {
        if (/\S/.test(text.charAt(i))) {
            text = text.substring(0, i + 1);
            break;
        }
    }

    return text;
}

或者一个不快但更简单的版本:

function trim(text) {
    return text.replace(/^\s+/, '').replace(/\s+$/, '');
}

三.数据存取

保证效率的原则如下:

  • 用局部变量缓存需要频繁存取的值

    比如arr.length,DOMNode List

  • 缩短作用域链

    除了with之外,try-catchcatch也会增长作用域链(在作用域链顶部增加了一个对象,该对象包含了异常对象),所以尽量不要在catch块里包含太多的代码,以降低性能影响

参考资料

  • 《高性能网站建设进阶指南》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code