高性能Js—数据存取

数据存取

JavaScript中四中基本的数据存取位置
  • 字面量:不存于某个变量内
  • 本地变量:var定义的
  • 数组元素
  • 对象成员

字面量、全局变量读取速度 > 数组项、对象成员 。因为局部变量存在于作用域链的起始位置

作用域
  • 作用域链
    函数创建——作用域中的scope属性(内部属性对象)——集合——作用域链(即函数创建后,内部的可访问数据对象在访问时填充而成)
  • 标识符解析
    对变量在作用域中的搜索过程。在执行环境的作用域链中,一个标识符所在的位置越深,读取速度越慢。全局变量总存在于作用域链的某端。
  • 少用动态作用域
    with、try catch等,会导致js引擎的自身优化性能失效。
  • 闭包:可以访问另一个函数中数据的函数。
    可能导致性能问题:需要更多的内存开销,因为函数在调用时,会创建一个scope属性对象的活动对象,而这个对象包含了执行环境中活动对象的所有属性和方法,相当于是执行环境中活动对象的一个副本,所以在执行环境执行完后他不会被销毁,造成内存消耗,内存泄漏
    解决:将常用的跨作用域的变量存储在局部变量中,直接访问 局部变量,这减轻了闭包的影响。
原型
  • 概念:原型是其他对象的基础,定义了实现新创建的对象所必须包含的成员列表。
  • 对象成员类型:
    实例成员
    原型成员:自动拥有 <——原型对象
  • 原型链:创建一个对象,在使用该对象某些属性时,需要遍历他的原型对象的属性,或是他父级的一些属性或方时,形成一个链条。用来实现JS中的继承。
  • 嵌套成员变量尽量少用。(嵌套越深,读取速度越慢)

原型链越深,读取速度越慢,越大;
解决:缓存对象成员值——> 保存到局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值