I am houbiao beta 0.1

javascript 数据访问优化之局部变量与全局变量

分类:Optimize

以下为引用书内的文字:计算机科学中的一个经典问题就是如何确定数据的存储位置,以获取最佳的读写效率。数据存储的问题,关系到代码执行过程中数据被检索到的速度。在javascript自己拍卖行,这个问题相对简单,因为它只有几种存储方案可供选择。不过,和其他编程语言一样,数据的存储位置会很大程度上影响其读取速度。javascript中有四种基本的数据存取位置:

直接量:直接量只代表自身,不存储在特定位置。javascript中的直接量有-字符串,数字,布尔值,对象,数组,函数,正则表达式,以及特殊的null和undefined值。

变量:开发人员用关键字var定义的数据存储单元。

数组元素:存储在javascript数组对象内部,以数字作为索引。

对象成员:存储在javascript对象内部,以字符串作为索引。

每一种数据存储的位置都有不同的读写消耗,总的来说,直接量和局部变量的访问速度快于数组项和对象成员的访问速度(据说Firefox3是个例外,因为它优化了数组项的存取)。

以上是对javascript数据的简单介绍,下面来说局部变量与全局变量。

一个函数(function)运行期间每遇到一个变量,都会经历一次标识符解析过程以决定从哪里获取或存储数据。该过程搜索运行期上下文的作用域链,查找同名的标识符,搜索过程从作用域链头部开始,如果找到了,就是用它,如果没找到则继续向下搜索,故,如果名字相同的两个变量存在于一个作用域链的不同部分,那么标识符就是便利作用域链时最先找到的那个,也就是说,第一个变量遮蔽了第二个(function以外不是如此),请看下图。javascript 数据访问优化之局部变量与全局变量

标识符的解析是有代价的,在运行期上下文的作用域链中,一个标识符的位置越深,它的读写速度也就越慢。因此得出结论,函数中读写局部变量总是最快的,而读写全局变量通常是最慢的(优化javascript引擎在某些情况下能有所改善)。请记住,全局变量总是存在于运行期上下文作用域链的最末端,因此它也是最远的。我们来看下面这段代码。javascript 数据访问优化之局部变量与全局变量该函数引用了3次document,而document是个全局变量,搜索该变量的过程必须遍历整个作用域链,直到最后在全局变量中才找到,这期间花费的时间其实都是在浪费,针对这个问题优化起来很简单,再看图。javascript 数据访问优化之局部变量与全局变量更新后的init函数,首先将document存储到了局部变量doc中,这就使得下面的引用document都变成了局部变量的操作,所以在性能是是个大大的提升,本函数是个简单的函数,没什么大的操作,也许性能的提升不是很明显,但是正如我们所说的,优化一切可以优化的地方。

类似上面说道的方法还可以使用withtry方法,但是都有各自的缺点,不是很适合这样的场合使用。以后在做详细介绍。

4784 reads 0 comment

上一篇:高效CSS选择符 - 这也许会颠覆你书写CSS的习惯

暂时还没有回复信息

Leave a comment

*