数据存取

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

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

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

作用域

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

原型

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

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

高性能Js—数据存取的更多相关文章

  1. 高性能JS笔记2——数据存取

    数据存取性能而言: 字面量>本地变量>数组元素>对象成员 一.标识符解析的性能 标识符解析是有代价的,一个标识符的位置越深,它的读写速度也就越慢. 局部变量的读写速度是最快的,全局变 ...

  2. 高性能JavaScript(数据存取)

    数据存取分为4各部分 存取位置 作用域及改变作用域 原型以及原型链 缓存对象成员值 存取位置 JavaScript 有4中基本的数据存取位置 字面量:字面量代表自身,不存于特定的位置.比如这个的匿名函 ...

  3. 《高性能js》读书笔记

    第一章:加载和执行 .浏览器的JavaScript的引擎是编译器层的优化: .当浏览器执行JavaScript代码时,不能同时做其他任何事情(单一进程),意味着 .主流浏览器都允许并行下载JS. .减 ...

  4. JavaScript数据存取的性能问题

    JavaScript中四种基本的数据存取位置: 字面量:只代表自身 字符串.数字.布尔值.对象.函数.数组.正则,以及null和undefined    快 本地变量:var定义的    快 数组元素 ...

  5. JS 数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...

  6. Hyperledger中数据存取的实现

    简介 本文介绍了在Hyperledger中数据存取的实现. API接口 Hyperledger提供基于key/value的数据存储,其中key是字符串,value则是二进制字节数组,Hyperledg ...

  7. HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较

    摘要:   在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...

  8. 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

    摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...

  9. HBase 高性能加入数据 - 按批多“粮仓”式解决办法

    摘要:如何从HBase中的海量数据中,以很快的速度的获取大批量数据,这一议题已经在<HBase 高性能获取数据>(http://www.cnblogs.com/wgp13x/p/42451 ...

随机推荐

  1. 扩展运算符和rest运算符

    扩展运算符 扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值 一.拆分数组 扩展运算符可以直接把数组拆分成用逗号隔开的值 <template> <sect ...

  2. centos7安装nodejs 和 yarn

    如何从EPEL库安装Node.js 另一个有效且简单的方法来安装Node.js就是从官方库.这同样确保您可以访问到EPEL库,你可以通过运行以下命令. sudo yum install epel-re ...

  3. SAP内存、ABAP内存、共享内存的 区别

    区别: (1)SAP内存使用 SET/GET parameters 方法: SET  PARAMETER  ID  ‘MAT’ field P_MATNR. GET  PARAMETER  ID  ‘ ...

  4. 爬虫四 selenium模块详细参数

    selenium元素定位方法 一.访问页面并获取网页html from selenium import webdriver browser = webdriver.Chrome() browser.g ...

  5. 【算法题 14 LeetCode 147 链表的插入排序】

    算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...

  6. [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例

    原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...

  7. Python之异常处理(Day27)

    一.错误和异常 part1: 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错 ...

  8. sql server分区

    1. 创建分区 分区步骤:1.创建分区函数  2.创建分区架构 3.创建分区索引(聚集)   --1. 创建分区函数 DECLARE @dt datetime SET @dt = '20030901' ...

  9. Harbor私有仓库搭建

    1.安装docker yum install -y dockersystemctl start dockersystemctl enable docker 2.安装docker-compose 1.下 ...

  10. 字典树 trie树 学习

    一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种   二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...