高性能Js—数据存取

数据存取

JavaScript中四中基本的数据存取位置

  • 字面量:不存于某个变量内
  • 本地变量:var定义的
  • 数组元素
  • 对象成员

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

作用域

  • 作用域链
    函数创建——作用域中的scope属性(内部属性对象)——集合——作用域链(即函数创建后,内部的可访问数据对象在访问时填充而成)
  • 标识符解析
    对变量在作用域中的搜索过程。在执行环境的作用域链中,一个标识符所在的位置越深,读取速度越慢。全局变量总存在于作用域链的某端。
  • 少用动态作用域
    with、try catch等,会导致js引擎的自身优化性能失效。
  • 闭包:可以访问另一个函数中数据的函数。
    可能导致性能问题:需要更多的内存开销,因为函数在调用时,会创建一个scope属性对象的活动对象,而这个对象包含了执行环境中活动对象的所有属性和方法,相当于是执行环境中活动对象的一个副本,所以在执行环境执行完后他不会被销毁,造成内存消耗,内存泄漏
    **解决:将常用的跨作用域的变量存储在局部变量中,直接访问 局部变量,这减轻了闭包的影响。 **

原型

  • 概念:原型是其他对象的基础,定义了实现新创建的对象所必须包含的成员列表。
  • 对象成员类型:
    实例成员
    原型成员:自动拥有 <——原型对象
  • 原型链:创建一个对象,在使用该对象某些属性时,需要遍历他的原型对象的属性,或是他父级的一些属性或方时,形成一个链条。用来实现JS中的继承。
  • 嵌套成员变量尽量少用。(嵌套越深,读取速度越慢)

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

原文地址:https://www.cnblogs.com/yehui-mmd/p/7397915.html