Recent Comments

Categories

均呢?他一直在前端路上,试图在这不归路上找到自己的方向 ...
Home » junLab » 高性能Javascript笔记(2)

高性能Javascript笔记(2)

第二章
在函数执行的过程中,每遇到一个变量,都会经历一次标识符解析过程,该过程搜索运行期上下文的作用域,查找同名的标识符,这个过程会影响性能。


解析,此函数用了三次document,而document是全局对象。
优化后

把document引用存储到局部变量doc中,从而使访问全局变量的次数由3次减少到1次。
PS:以前我见到人家这么写,我还在暗自说,此举不是多余的吗,一直不惑,原来是有种原因,以后写东西也要养成这个习惯了~~~ :)

with{},try{}catch{} 会改变运行期上下文的作用域
with{}可以避免使用,而try{}catch{}则可以委托处理器方法,如

闭包
通常来说,函数的活动对象会随同运行期上下文一同销毁,但引入闭包时,由于仍然存在于闭包的[[scope]]属性中,因此激活对象无法被销毁,所以脚本中的闭包与非闭包相比,需要更多的内存。IE甚至会导致内存泄露。

原型链
对象在原型链中存在的位置越深,找到它也就越慢。
搜索实例成员比从直接量或者局部变量中访问数据代价更高,再加上遍历原型链带来的开销,更加放大了这一影响。

PS:我一直以为window.location.href是正规的写法,原来location.href执行上会比前者快。

在函数中如果要多次读取同一个对象属性,最佳做法是将属性值保存到局部变量中。
javascript的命名空间,是导致频繁访问嵌套属性的起因之一。如YUI

优化后

添加新评论 »

一直在路上 - junNe.NET is powered by Typecho))) and Theme From junType