数据存储共有4中方式:直接量、变量、数组项、对象成员。

访问直接量和局部变量的时间快,访问数组元素和对象成员相对较慢。局部变量存在于作用域链的起始位置,因此访问局部变量比访问跨作用域变量更快。全局变量总处于作用链的最末端,因此访问速度也是最慢的。

通常把常用的对象成员、数组元素、跨域变量保存到局部变量中来改善JavaScript的性能。

1. js四种基本的数据存储位置:

1) 直接量: 只代表本身,不存储在特定位置(字符串, 数字, 布尔值, 对象, 数组, 函数, 正则表达式, null, undifined)

2) 变量: 用关键字var定义的数据存储单元, 函数内部声明的时候一定要用var, 否则是全局变量

3) 数组元素: 存储在js数组对象内部, 以数字作为索引.

4) 对象成员: 存储在js数组对象内部, 以字符串作为索引.

性能方面取决于浏览器分别对这四种数据存储位置进行200000次操作所用的时间. 直接量和局部变量的访问速度快于数组项和对象成员的访问速度。

2. 管理作用域(比如确定那些变量可以被函数访问, 确定this的赋值)

1) 作用域链和标识符解析

内部属性[Scope]:包含了一个函数被创建的作用域中对象的集合. 这个集合被称为函数的作用域链,决定了那些数据能被函数访问.

执行函数时会创建一个成为'运行上下文'的内部对象, 每个运行期上下文都有自己的作用域链,用于标识符解析.

2) 标识符解析的性能

一个标识符所在的位置越深,它的读写速度就越慢.函数中读写局部变量是最快的,读写全局变量(总是处于运行期上下文作用域链的最末端)是最慢的(Chrome和Safari 4 不会出现这种问题).

跨作用域的值(如document)在函数中被引用一次以上,  那么就把它存储到局部变量里.

3) 改变作用域链

with语句用来给对象的所有属性创建一个变量. (实际功能用来避免书写重复代码),但是访问布局变量变慢了。(避免使用)

try-catch,在catch代码块内部,函数所有局部变量将会放在第二个作用域链对象中.但他不是用来解决js错误的。(小心使用)

4) 动态作用域(只有确实有必要时再用)

with

try-catch

eval()函数,可计算某个字符串,并执行其中的的 JavaScript 代码。

5) 闭包, 作用域和内存

闭包: 允许函数访问布局作用域之外的数据. 能够读取其他函数内部变量的函数, 由于在Javascript语言中, 只有函数内部的子函数才能读取局部变量, 因此可以把闭包简单理解成“定义在一个函数内部的函数”。

闭包作用: 一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

3. 对象成员

DOM: 文档对象模型

BOM: 浏览器对象模型

对象成员包含属性和方法,包含任何数据类型,既可以说他是函数也可以是一种对象。

一个命名的成员引用了一个函数,该成员就被成为一个' 方法 '。一个非函数类型的成员被称为' 属性 '。

对象类型:实例成员(存在于对象实例中)和原型成员(由对象原型继承而来)。

1) 原型

对象通过一个内部属性绑定到它的原型。内部属性 _proto_ 与属性中的function并存,属性中hasOwnProperty()=> 判断对象是否包含特定的实例成员;in操作=>确定对象是否包含特定的属性(实例和原型)

2) 原型链

构造器Book用来创建了一个新的Book实例book1。book1的原型(_proto_)是Book.prototype,Book.prototype的原型是Object.这个过程创建了一个原型链,book1和book2继承了它们的成员。

3) 嵌套成员

  嵌套越深,访问越慢,影响性能,尽量少用。

4) 缓存对象成员值(不适用于对象)

  使用一次以上,将值存储到局部变量使用,局部变量访问速度快。  

转载于:https://www.cnblogs.com/floraCnblogs/p/js-data-access.html

JavaScript的数据访问总结相关推荐

  1. JavaScript对HTML文件进行数据访问

    要求 用JavaScript对HTML文件(见上一篇博客)进行数据访问,将获得的所有个人简历信息项的值以XML方式进行组织,并通过对话框显示出来: (具体来说就是通过DOM来获得所有个人简历信息项的值 ...

  2. 高性能Javascript:高效的数据访问

    2019独角兽企业重金招聘Python工程师标准>>> 经典计算机科学的一个问题是,数据应当存放在什么地方,以实现最佳的读写效率.数据存储是否得当,关系到代码运行期间数据被检索到的速 ...

  3. axis2 默认端口_基于 AXIS2/C 的 C 语言库实现对提供 REST API 的系统进行数据访问...

    基于 AXIS2/C 的 C 语言库实现对提供 REST API 的系统进行数据访问 宋 东平 和 赵 健 2013 年 3 月 07 日发布 AXIS2/C 简介和 REST 及 REST API ...

  4. petshop4.0 详解之三(PetShop数据访问层之消息处理)

    在进行系统设计时,除了对安全.事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量.数据流量.服务器负荷的问题.解决性能的瓶颈,除了对硬件系 ...

  5. flex与JavaScript的数据交互

    上一篇发了 flex3 接受外部参数 ,但是后来想想,应该更进一步的了解 flex与JavaScript的数据交互. 第一种: test4.swf 代码: <?xml version=" ...

  6. MVC3学习第六章 排山倒海第二变----使用 Entity Framework Code-First 进行数据访问

    本章学习内容 1.Entity Framework 4.1介绍 2.Entity Framework Code-First 进行数据访问 3.利用EF实现用户的增加和列表功能 1.Entity Fra ...

  7. 服务器端可控情形的Javascript跨域访问解决方法

    在最近的一个web项目中为了实现bookmark功能碰到了javascript跨域访问的问题.起初,在google上搜的很多解决方案并不适用于我的情形,只在有一篇文章中提到的远程加载javascrip ...

  8. 运用javascript的成员访问特性来实现通用版的兼容所有浏览器的打开对话框功能...

    打开网页对话框,一般有三种方法:window.open.window.showModalDialog.window.showModelessDialog,每一种都有它的优点与不足.第一种方法:wind ...

  9. html访问access,HTML_ACCESS数据访问页配置实例,今天在本机上配置成功三层式 - phpStudy...

    ACCESS数据访问页配置实例 今天在本机上配置成功三层式访问! 环境: Windows XP Pro Office XP 配置步骤: 第一步:制作ACCESS数据访问页j.htm,并测试正常; 第二 ...

最新文章

  1. c盘扩展卷是灰色的_银行电脑win7-C盘满了怎么办
  2. 栈、堆、方法区之间的关系
  3. poj 3537 Crosses and Crosses 博弈论之grundy值
  4. IOS —— 网络那些事(上) - http协议
  5. C语言 main 函数参数 main(int argc, char *argv[]) - C语言零基础入门教程
  6. (最小生成树)prim算法
  7. 折线 没有显示_动画折线图,你还可以试试这个图表
  8. DDD领域模型、贫血模型、充血模型概念总结
  9. 【英语学习】【English L06】U06 Banking L6 Do you use online banking?
  10. Python嵌套定义函数增强reduce()函数功能
  11. 换行与回车(\r \n)的起源以及在编制语言中的使用
  12. java中switch条件_关于java:你能在Android的switch-case中使用条件语句吗?
  13. linux的python2.7的paramiko_centos7 python2.7下安装paramiko模块
  14. 十八、JAVA基本数据类型的包装类
  15. java6 64位_java6下载-java6官方版下载v6.0 最新64位免费版-旋风软件园
  16. 4k电视色彩表现测试软件,选高端4K电视 4K测试图帮你轻松分辨
  17. Rhino基础教程---三管混接(法二、法三)
  18. 【Android】Android 集成芯烨云打印机实现打印票据
  19. Vue中变量前加...三个点什么意思
  20. SpringBoot优缺点分析

热门文章

  1. 嵌入式环境:挂载开发板根NFS文件系统失败
  2. HBase之HFile解析
  3. 电商课题I:集群环境下业务限流
  4. WinForm编程数据视图之DataGridView浅析(续)
  5. Maven pom.xml 全配置(二)不常用配置
  6. idea中maven导入jar包
  7. freemarker入门教程
  8. 窥探try ... catch与__try ... __except的区别
  9. 点击页面空白处就关闭某个层是怎么做到的
  10. PHP爬取企业详情(百度信用)