读书人

js性能研究系列之-数据访问相干

发布时间: 2012-11-25 11:44:31 作者: rapoo

js性能研究系列之----数据访问相关

前言

?

本来按照自己的计划是推出的是

?

    常用性能分析工具介绍和使用帮助内存泄露相关js内核介绍优化分析js解析执行机制分段和延迟加载。。。。。。。
---------------任务是艰巨的,道路是漫长的,一步一步,认认真真地走下去。切勿浮躁
正文
?? ? ?好了,言归正传,以前记得一个同学说过理解Javascript,就必须弄明白执行环境闭包词法作用域作用域链,标识符解析,预解析等等。。。

1、执行环境高级编程上曾经说过:?? ? ? ? ?i、作为拥有变量松散类型的Javascript,决定了它的变量只在特定的时间用于保存特定值。?? ? ? ? ?ii、执行环境定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。每一个执行环境中定义的所有 ? ? ? ? ? ? ? ? ? ? 变量和函数多保存在一个关联的变量对象里面。代码无法访问这个变量对象,但是解析器在处理数据的时候 ? ? ? ? ? ? ? ? ? ? ?会使用它。
?? ? ?这边我以前一直在想一个问题:变量定义了,分配了存储位置,就一定会有读取和写入的效率。那么每一个函数在被调用的时候都会创建自己的执行环境,那么怎样才能提高数据被检索到的速度呢。
高性能上曾经说过:?? ? ? ? ?--------我们可以把数据存取位置分为下列4种
    直接量----代表自身,不存储在特定的位置。包括字符串、数字、布尔值等等。变量----var 出来的。数组元素----存储在数组对象内部,以数字作为索引。对象成员----存储在对象内部,以字符串作为索引。 ? ? ? ? ? ? ? ? ?
?? ? 相比而言,一个直接量和一个局部变量中存取数据的性能差异是很小的,但是访问数组元素和对象成员就会高一点。当然每一个浏览器的内核(不了解内核,嘻嘻可以看看v8)不一样,所以具体的差别还是针对不一样的浏览器。
?? ? 这边有一个特例:ff3优化了数组项的存取,所以速度得到了优化。
2、作用域

?

?? ? ? ?无论从性能角度去分析还是一般从我们代码的设计去实现某些功能的角度去分析或者说一些方法安全角度去考虑这个“作用域”的问题,多是很有意义的。因为里面涉及到比如变量可以被谁去访问或者this的时候咋去赋值。

?

?? ? ? 作用域链----在代码执行环境中会创建由变量对象构成的。

?

    ??用途:保证对执行环境有权访问的所以变量和函数的有序访问??内部:a.链的前端是当前执行的代码所在的环境的变量对象 b.下一个变量对象来自外部 c.最末端是全局执行环境 ?下的对象如全局变量、window这样的
其实如果你研究过jquery源码你会发现在函数内部的局部变量包含document = window.documentuserAgent =navigator.userAgent      toString =Object.prototype.toString还有就是很多人已经发现的jQuery在闭包的参数就是window

读书人网 >JavaScript

热点推荐