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>범위 체인을 일시적으로 변경할 수 있습니다
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:/content/3493261.html
8.内存泄露
内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在C++中,因为是手动管理内存,内存泄露是经常出现的事情。而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露。
内存泄露的几种情况
循环引用
Javascript闭包
DOM插入顺序
一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,这个DOM对象可能会引发内存泄漏。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null。
具体的就深入讨论了,这里的总结
JS的内存泄露,无怪乎就是从DOM中remove了元素,但是依然有变量或者对象引用了该DOM对象。然后内存中无法删除。使得浏览器的内存占用居高不下。这种内存占用,随着浏览器的刷新,会自动释放。
而另外一种情况,就是循环引用,一个DOM对象和JS对象之间互相引用,这样造成的情况更严重一些,即使刷新,内存也不会减少。这就是严格意义上说的内存泄露了。
위 내용은 고성능 데이터 스토리지의 JavaScript 구현 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!