Frage zur Effizienz der Schließung / Verkapselung in JavaScript

8

Ich bin etwas neu in JavaScript, also ertragen Sie mit mir, wenn das eine dumme Frage ist.

Nehmen wir an, ich habe eine "Klasse", die so aussieht:

%Vor%

Unter der Annahme, dass meine Syntax korrekt ist, definiert dies eine Klasse mit einer "privaten" Eigenschaft namens "value" mit Methoden zum Festlegen / Abrufen der Eigenschaft. Jetzt werde ich zwei Objekte aus dieser Klasse erstellen:

%Vor%

Erstellt dies eine separate Methode setVal () und getVal () für jedes -Objekt? Wenn nicht, warum nicht? Wenn ja, ist dies ein ernst zu nehmendes Problem beim Aufbau effizienter Webanwendungen? Ist der Kompromiss (falls vorhanden) der Effizienz der Schließung in den meisten / allen Kontexten lohnend? Bin ich dumm?

Danke, Gerard

    
GRardB 13.06.2011, 13:59
quelle

2 Antworten

3
%Vor%

Was diese Funktion macht ist wie folgt:

  • Erstellen Sie die Variable mit dem Namen val
  • neues Objekt erstellen
  • Erstellen Sie eine neue Funktion und weisen Sie sie dem Feld setVal zu
  • Erstellen Sie eine neue Funktion und weisen Sie sie dem Feld getVal zu
  • Rückgabeobjekt.

Ihr erschafft also immer 4 neue Dinge.

Dies ist nicht wirklich ein Problem, wenn Sie weniger als 1000 Objekte auf der Seite haben. Refactoring weg ist eine Mikrooptimierung.

Die Alternative wäre, sich nicht auf lokale Variablen zu stützen und this._val zu verwenden, um anzuzeigen, dass val privat ist.

    
Raynos 13.06.2011 14:16
quelle
0

Es tut dies konzeptionell. Da dies jedoch ein gängiges Muster ist, wissen moderne JavaScript-JITer, wie man sie so optimiert, dass nur eine Kopie des Codes im Speicher abgelegt wird, mit entsprechenden Zeigerumleitungen, damit sie mit dem entsprechenden Abschluss funktionieren.

EDIT: Obwohl ich nicht wirklich bereit bin, den Quellcode zu durchsuchen, hier ein paar grundlegende Beweise. Laden Sie das Chrome-Entwickler-Channel-Release herunter und machen Sie vor und nach dem Ausführen des folgenden Codes einen Heap-Snapshot:

> %Vor%

Machen Sie das Gleiche für diesen Code:

%Vor%

Sie werden feststellen, dass die Halde-Snapshots in beiden Fällen die gleichen Zahlen für "Code" anzeigen, also wird die von mir beschriebene Optimierung tatsächlich ausgeführt.

    
Domenic 13.06.2011 14:07
quelle