Heim > Web-Frontend > js-Tutorial > Hauptteil

Zusammenfassung der JavaScript-Implementierung der Hochleistungsdatenspeicherung

怪我咯
Freigeben: 2017-03-29 14:41:30
Original
1242 Leute haben es durchsucht

1.Vier grundlegende Datenzugriffsorte in JavaScript: Literal, lokalVariable, ArrayElement, ObjektMitglieder .

Im Allgemeinen: [Literal, lokale Variable] Laufgeschwindigkeit>[Array, Objektmitglied]

2 Interne Attribute umfassen eine Sammlung von Objekte im Bereich, in dem eine Funktion erstellt wird. Diese Menge wird als Bereichskette bezeichnet.

3. Führen Sie die Funktion aus -> Erstellen Sie ein aktives Objekt (d. h. ein Funktionslaufzeitvariablenobjekt).

Der mehrmalige Aufruf derselben Funktion führt also zur Erstellung mehrerer Ausführungsumgebungen.

4. Funktionsausführungsprozess

Jedes Mal, wenn eine Variable angetroffen wird, durchläuft sie einen Identifier-Auflösungsprozess, bei dem Daten abgerufen oder gespeichert werden. Dieser Prozess durchsucht die Bereichskette der Ausführungsumgebung. Es ist dieser Suchvorgang, der sich auf die Leistung auswirkt.

5. Leistung der Identifikatoranalyse

Globale Variablen sind immer am Ende des Ausführungsumgebungsbereichs vorhanden. Lokale Variablen werden zuerst aufgelöst.

Faustregel: Wenn in einer Funktion mehr als einmal auf einen bereichsübergreifenden Wert verwiesen wird, speichern Sie ihn in einer lokalen Variablen.

Zum Beispiel:

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



6. Ändern Sie die Bereichskette

Im Allgemeinen , ändert sich die Bereichskette einer Ausführungsumgebung nicht.

<1>mit kann die Bereichskette vorübergehend ändern

width wird verwendet, um eine Variable für alle Eigenschaften des Objekts zu erstellen

function initUI(){
 with(document){
 var bd=body; 
 }
}
Nach dem Login kopieren



当代码执行到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对象之间互相引用,这样造成的情况更严重一些,即使刷新,内存也不会减少。这就是严格意义上说的内存泄露了。



Das obige ist der detaillierte Inhalt vonZusammenfassung der JavaScript-Implementierung der Hochleistungsdatenspeicherung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage