高性能javascript读书笔记之数据存取

来源:互联网 发布:手机淘宝描述尺寸 编辑:程序博客网 时间:2024/05/09 12:23
数据存储的位置关系到代码执行过程中数据的检索速度,改变数据的存储位置来获得最佳的读写性能。

javascript中四种基本的数据存取位置:
1.字面量:只代表自身,不存储在特定位置,有字符串、数字、布尔值、对象、函数、正则表达式,以及特殊的null 和undefined值。
2.本地变量:使用var定义的数据存储单元。
3.数组元素:存储在javascript数组对象内部,以数字作为索引。
4.对象成员:存储在javascript对象内部,以字符串作为索引。

注:字面量和局部变量的访问速度快于数组项和对象成员的访问速度,只有Firefox3是个例外。

性能优化建议:
1.访问字面量和局部变量的速度最快,相反,访问数组元素和对象成员相对较慢。那么,尽量使用字面量和局部变量,减少数组项和对象成员的使用。

2.由于举办变量存在于作用域链的起始位置,因此访问局部变量比访问跨作用域变量更快。变量在作用域链的位置越深,访问所需时间就越长。由于全局变量总处在作用域链的最末端,因此访问速度也是最慢的。
一个好的经验法则:如果某个跨作用域的值在函数中被引用一次以上,那么就把它存储到局部变量里。

3.with语句和 try-catch语句会改变执行环境作用域链,要小心使用。
   with语句:一个新的变量对象被创建,包含参赛指定对象的所有属性,这个对象被推入作用域链的首位,意味着所有局部变量处于第二个作用域链对象中,增加了访问代价。
   try-catch语句:将异常对象推入一个变量对象并置于作用域的首位。推荐做法:将错误委托给一个函数来处理。

4.嵌套的对象成员会明显影响性能,尽量少用。嵌套越深,读取速度越慢。
   
5.闭包会导致性能问题:在频繁访问跨作用域的标识符时,每次访问都会带来性能损失。
   建议:将常用的跨作用域的变量存储在局部变量中,然后直接访问局部变量。

6.属性或方法在原型链中的位置越深,访问它的速度也越慢。
   注:搜索实例成员比从字面量或局部变量读取数据代价更高,再加上遍历原型链带来的开销,让性能问题更严重。
通常,在函数中如果要多次读取同一个对象属性,最佳做法是将属性值保存到局部变量中。


0 0
原创粉丝点击