源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

实现JavaScript高性能的数据存储

  • 时间:2022-04-07 12:23 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:实现JavaScript高性能的数据存储
[b]1.JavaScript中四种基本数据存取位置:字面量,本地变量,数组元素,对象成员。[/b] 一般来说:[字面量,局部变量]运行速度>[数组,对象成员] [b]2.内部属性包含了一个函数被创建的作用域中对象的集合。这个集合被称为作用域链。[/b] [b]3.执行函数->创建执行环境->创建活动对象(即函数运行时变量对象)。[/b] 所以多次调用同一个函数会导致创建多个执行环境。 [b]4.函数执行过程[/b] 每遇到一个变量都会经历一次标识符解析过程,从哪里获取或存储数据。该过程搜索执行环境的作用域链。正是这种搜索过程影响了性能。 [b]5.标识符解析的性能[/b] 全局变量总是存在于执行环境作用域的[b]最末端[/b]。局部变量是第一顺位解析。 经验法则:如果某个跨作用域的值在函数中被引用一次以上,那么就把他存储到局部变量中。 如:
function initUI(){
 var bd=document.body;
 //后面有多次doucument这个全局对象的调用
}
//->优化后
function initUI(){
 var doc=document;
  bd=doc.body;
 //把doucument这个全局对象的引用存储到局部变量doc中
 
}
[b]6.改变作用域链[/b] 一般来说,一个执行环境的作用域链不会改变的。 [b]<1>with可以临时改变作用域链[/b] width用来给对象的所有属性创建一个变量
function initUI(){
 with(document){
 var bd=body; 
 }
}
当代码执行到with时,[b]执行环境的作用域链被临时改变了[/b]。一个新的变量对象呗创建,它包含了参数指定对象的所有属性。[b]这个对象呗推入作用域链的[/b][b]首位[/b],所以这时候所有的局部变量处于的哥第二个作用域链对象中,因此访问代价更高了。 [b]<2>try-catch[/b] try语句发生错误的时候,执行过程会自动跳转到catch中。[b]然后把异常对象推入一个变量对象并置于作用域的首位。[/b] [b]注意[/b]:一旦catch子语句执行完毕,作用域链就会返回到之前的状态。 [b]7.闭包引发的性能问题[/b] 闭包是JavaScript最强大的特性之一。 由于闭包包含了执行了与环境作用域链相同对象的引用,函数的活动对象不会被销毁,造成更多的内存开销。 [b]关注的性能点:[/b]频繁访问跨作用域的标识符时,每次访问都会带来性能损失。 Start:19:41:45 2015-11-21 引用自by Aaron:[url=http://www.cnblogs.com/aaronjs/p/3370176.html]http://www.cnblogs.com/aaronjs/p/3370176.html[/url] [b]8.内存泄露[/b] 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露。 [b]内存泄露的几种情况[/b] [list] [*]循环引用[/*] [*]Javascript闭包[/*] [*]DOM插入顺序[/*] [/list] 一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,这个DOM对象可能会引发内存泄漏。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null。 [b]具体的就深入讨论了,这里的总结[/b] [list] [*]JS的内存泄露,无怪乎就是从DOM中remove了元素,但是依然有变量或者对象引用了该DOM对象。然后内存中无法删除。使得浏览器的内存占用居高不下。这种内存占用,随着浏览器的刷新,会自动释放。[/*] [*]而另外一种情况,就是循环引用,一个DOM对象和JS对象之间互相引用,这样造成的情况更严重一些,即使刷新,内存也不会减少。这就是严格意义上说的内存泄露了。[/*] [/list] 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程素材网!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部