首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议151:数据存储要考虑访问速度

关灯直达底部

计算机科学的一个经典问题是确定数据应当存放在什么地方,以实现最佳的读写效率。数据存储在哪里,关系到代码运行期间数据被检索到的速度。在JavaScript中,此问题相对简单,因为进行数据存储只有少量方式可供选择。正如其他语言那样,数据存储位置关系到访问速度。JavaScript中有4种基本的数据存储位置,下面分别进行介绍。

❑直接量:仅仅代表自己,而不存储于特定位置。JavaScript的直接量包括字符串、数字、布尔值、对象、数组、函数、正则表达式、具有特殊意义的空值(null)和未定义值(undefined)。

❑变量:使用var关键字创建用于存储的数据值。

❑数组项:具有数字索引,存储一个JavaScript数组对象。

❑对象成员:具有字符串索引,存储一个JavaScript对象。

每一种数据存储位置都具有特定的读写操作负担。在大多数情况下,对一个直接量和一个局部变量数据进行访问的性能差异是微不足道的。访问数组项和对象成员的代价要高一些,具体高多少,很大程度上取决于浏览器。

早期版本的浏览器使用传统的JavaScript引擎,如Firefox 3、IE 6和Safari 3.2,它们比优化后的JavaScript引擎耗费更多时间。总的来说,直接量和局部变量的访问速度要快于数组项和对象成员的访问速度。因此,如果关心运行速度,那么尽量使用直接量和局部变量,限制数组项和对象成员的使用。

在JavaScript中,数据存储位置可以对代码整体性能产生重要影响。数据访问类型有4种:直接量、变量、数组项、对象成员。它们有不同的性能考虑。

❑直接量和局部变量访问速度非常快,而数组项和对象成员需要更长时间。

❑局部变量的访问速度比域外变量快,因为它位于作用域链的第一个对象中。变量在作用域链中的位置越深,访问所需的时间就越长。全局变量总是最慢的,因为它们总是位于作用域链的最后一环上。

❑避免使用with表达式,因为它改变了运行期上下文的作用域链。还应当小心对待trycatch表达式的catch子句,因为catch子句具有同样效果。

❑嵌套对象成员会造成重大性能影响,尽量少用。

❑一个属性或方法在原型链中的位置越深,访问它的速度就越慢。

一般来说,可以通过这种方法提高JavaScript代码的性能:将经常使用的对象成员、数组项和域外变量存入局部变量中。然后,访问局部变量的速度会快于那些原始变量。通过使用这些策略,可以极大地提高那些需要大量JavaScript代码的网页应用的实际性能。