实现JavaScript高性能的数据存储


Posted in Javascript onDecember 11, 2016

1.JavaScript中四种基本数据存取位置:字面量,本地变量,数组元素,对象成员。

一般来说:[字面量,局部变量]运行速度>[数组,对象成员]

2.内部属性包含了一个函数被创建的作用域中对象的集合。这个集合被称为作用域链。

3.执行函数->创建执行环境->创建活动对象(即函数运行时变量对象)。

所以多次调用同一个函数会导致创建多个执行环境。

4.函数执行过程

每遇到一个变量都会经历一次标识符解析过程,从哪里获取或存储数据。该过程搜索执行环境的作用域链。正是这种搜索过程影响了性能。

5.标识符解析的性能

全局变量总是存在于执行环境作用域的最末端。局部变量是第一顺位解析。

经验法则:如果某个跨作用域的值在函数中被引用一次以上,那么就把他存储到局部变量中。

如:

function initUI(){
 var bd=document.body;
 //后面有多次doucument这个全局对象的调用
}
//->优化后
function initUI(){
 var doc=document;
  bd=doc.body;
 //把doucument这个全局对象的引用存储到局部变量doc中
 
}

6.改变作用域链

一般来说,一个执行环境的作用域链不会改变的。

<1>with可以临时改变作用域链

width用来给对象的所有属性创建一个变量

function initUI(){
 with(document){
 var bd=body; 
 }
}

当代码执行到with时,执行环境的作用域链被临时改变了。一个新的变量对象呗创建,它包含了参数指定对象的所有属性。这个对象呗推入作用域链的首位,所以这时候所有的局部变量处于的哥第二个作用域链对象中,因此访问代价更高了。

<2>try-catch

try语句发生错误的时候,执行过程会自动跳转到catch中。然后把异常对象推入一个变量对象并置于作用域的首位

注意:一旦catch子语句执行完毕,作用域链就会返回到之前的状态。

7.闭包引发的性能问题

闭包是JavaScript最强大的特性之一。

由于闭包包含了执行了与环境作用域链相同对象的引用,函数的活动对象不会被销毁,造成更多的内存开销。

关注的性能点:频繁访问跨作用域的标识符时,每次访问都会带来性能损失。

Start:19:41:45 2015-11-21 引用自by Aaron:http://www.cnblogs.com/aaronjs/p/3370176.html

8.内存泄露

内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露。

内存泄露的几种情况

  • 循环引用
  • Javascript闭包
  • DOM插入顺序

一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,这个DOM对象可能会引发内存泄漏。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null。

具体的就深入讨论了,这里的总结

  • JS的内存泄露,无怪乎就是从DOM中remove了元素,但是依然有变量或者对象引用了该DOM对象。然后内存中无法删除。使得浏览器的内存占用居高不下。这种内存占用,随着浏览器的刷新,会自动释放。
  • 而另外一种情况,就是循环引用,一个DOM对象和JS对象之间互相引用,这样造成的情况更严重一些,即使刷新,内存也不会减少。这就是严格意义上说的内存泄露了。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
JavaScript修改css样式style动态改变元素样式
Dec 16 Javascript
可自定义速度的js图片无缝滚动示例分享
Jan 20 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 Javascript
Javascript基础知识盲点总结之函数
May 15 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 Javascript
vue中进行微博分享的实例讲解
Oct 14 Javascript
探索Javascript中this的奥秘
Dec 11 #Javascript
实例浅析js的this
Dec 11 #Javascript
解析js如何获取css样式
Dec 11 #Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 #Javascript
JQuery.validationEngine表单验证插件(推荐)
Dec 10 #Javascript
JS产生随机数的用法小结
Dec 10 #Javascript
基于JavaScript实现随机颜色输入框
Dec 10 #Javascript
You might like
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
jquery中对表单的基本操作代码
2010/07/29 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python实现串口自动触发工作的示例
2019/07/02 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
Django视图扩展类知识点详解
2019/10/25 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
python 如何调用远程接口
2020/09/11 Python
python用Configobj模块读取配置文件
2020/09/26 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
高中的自我鉴定
2013/12/16 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
家长学校教学计划
2015/01/19 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
小学英语教学随笔
2015/08/14 职场文书