Auswirkungen auf die Leistung der Definition von Methoden über Prototypen vs. Konstruktoren in JavaScript
In JavaScript gibt es zwei Ansätze zum Erstellen von „Klassen“ mit öffentlichen Funktionen: unter Verwendung des Prototyps oder des Konstruktors. Methode 1 weist Instanzen Funktionen über den Konstruktor zu, während Methode 2 den Prototyp verwendet, um Funktionen zwischen allen Instanzen zu teilen.
Während Methode 2 oft als effizienter behauptet wird, ist es ein erheblicher Nachteil, Instanzen private Instanzvariablen zu entziehen . Kommt es jedoch in der Praxis tatsächlich zu der offensichtlichen Erstellung doppelter Funktionskopien für jede Instanz durch Methode 1?
Empirische Evidenz aus dem JsPerf-Benchmark
JsPerf-Benchmarking legt nahe, dass Methode 2 (Prototyp ) übertrifft tatsächlich Methode 1 (Konstruktor) in Bezug auf die Geschwindigkeit.
Praktische Implikationen
Während dieser Unterschied in Benchmarks offensichtlich ist, ist seine Relevanz in realen Anwendungen fraglich . Selbst in Szenarien mit einer erheblichen Anzahl von Objektinstanziierungen (z. B. 10.000 pro Frame) ist es unwahrscheinlich, dass diese Mikrooptimierung Leistungsengpässe lindert.
Empfehlungen
Bei Optimierung Da die Leistung von entscheidender Bedeutung ist, empfiehlt es sich, Methoden über den Prototyp zu deklarieren. Ansonsten bietet Methode 1 mehr Flexibilität und hält sich an gängige objektorientierte Programmierkonventionen. Darüber hinaus verbessert die Verwendung privater Eigenschaften, die durch ein Unterstrich-Präfix gekennzeichnet sind (z. B. _process()), die Kapselung und verhindert direkte Änderungen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3