《高性能javascript》读书笔记-第二章 数据存取

javascript中有四种基本的数据存取位置:字面量、变量、数组元素、对象成员。

1.访问字面量和局部变量的速度最快,访问数组元素和对象成员相对较慢。

2.变量在作用域链中的位置越深,访问所需时间越长。

-局部变量位于作用域链的起始位置,因此访问速度最快;

-全局变量位于作用域链的最末端,因此访问速度最慢。

3.with语句和try-catch中的catch子句可以改变执行环境的作用域链,有时会增加访问代价,应小心使用。

-with(A)会创建一个变量对象推入作用域链的首位,这个变量对象拥有A对象的所有属性

function initUI(){
    width(document){//虽然避免了多次书写document,但是其他局部变量(如i)处于作用域链的第二个对象中
      let bd = body,
        links = getElementsByTagName('a'),
        i=0,
        len = links.length
    //其他代码
  }
}

-catch()子句会把异常对象推入作用域链的首位,catch代码块内部访问的所有局部变量会被放到作用域链的第二个对象中。

4.嵌套的对象成员会明显影响性能,尽量少用。

如执行时间:location.href < window.location.href < window.location.href.toString()

5.就对象及对象原型来说,属性或方法在原型链中的位置越深,访问它的速度越慢。

如访问时间:实例属性 < 第一层原型属性 < 第二层原型属性

6.在同一个函数中没必要多次读取同一个对象成员,建议第一次查询到值后就将其存储在局部变量中。

//bad
if(objecA.attr === 1 || objecA.attr === 2 || objecA.attr === 3){}
//good
const { attr } = objecA
if(attr === 1 || attr === 2 || attr === 3){}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值