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
Was diese Funktion macht ist wie folgt:
val
setVal
zu
getVal
zu
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.
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.
Tags und Links javascript performance oop closures