2010-12-27 3 views
0

Ich habe mich gefragt, was wieIst es ineffizient, var x = obj.prop aus Gründen der Kompaktheit neu zu deklarieren?

etwas zu tun, Leute dachten
var x = obj.child.prop1; 
doSomething(x); 
doOtherThings(x); 

Hat var nicht mehr Speicher zuweisen, anstatt einen Verweis zu erstellen? Würde es sich lohnen, in diesem Fall x nicht neu zu definieren und stattdessen die längere Referenz zu verwenden?

+0

Auch wenn es ein * weeee * etwas mehr Speicher zuteilt, wenn Ihre geistige Gesundheit auf dem Spiel steht, definieren, dass 'X'. – Matchu

+0

In jedem Buch, das ich über JavaScript und Performance gelesen habe, wurde immer gesagt, wenn man auf eine (wahrscheinlich verschachtelte) Eigenschaft mehr als einmal zugreifen muss, muss man sie einer lokalen Variablen zuweisen. Außerdem könnte es sein, dass "obj" nicht einmal in Ihrem Gültigkeitsbereich ist, und es ist sogar besser, es zu cachen, um Nachschlagevorgänge in der Scope-Kette zu vermeiden. –

Antwort

5

Nein, var nicht mehr Speicher zuzuteilen. Was sie tut, ist eine Referenz direkt auf obj.child.prop1 erstellen, anstelle von durch die child Eigenschaft obj und die prop1 Eigenschaft des Objekts zweimal jeweils zu gehen. In jedem Fall weiß ich, es ist marginal effizienter in Bezug auf die Code-Größe und Ausführungsgeschwindigkeit.

0

Nein, der ‚var‘ Keyword zugewiesen nicht mehr Speicher (darüber hinaus erforderlich, dass die leichtgewichtige Referenz). Es ist wahr, dass TANSTAAFL, aber auf der anderen Seite wird der Effekt sehr minimal sein.

Mein Rat: Benchmark es. Wahrscheinlich werden Sie feststellen, dass Sie den Unterschied nicht messen können. Und mit einigen modernen Browsern können Sie feststellen, dass es in schweren Loops die Haare langsamer macht.

+0

Der Speicher für den Stack sollte vorab zugewiesen werden, nicht bei Bedarf für jede lokale Variable. – Chuck

+0

@Chuck Ja, aber es muss zugewiesen werden. Daher wird es nicht in dem Moment zugewiesen, in dem die Anweisung getroffen wird, sondern ein Programm mit 40.000 eindeutigen Variablen, die auf dieselbe Zeichenfolge verweisen, benötigt mehr Speicher als einer mit nur einer Variablen. – Phrogz

+0

Das ist nur wahr, wenn diese Variablenbindungen alle gleichzeitig existieren müssen. Wenn Sie 10.000 Funktionen haben, die jeweils vier Referenzen auf das Objekt verwenden (was 40.000 Variablen im gesamten Programm wären), bezweifle ich, dass die Variablen mehr Speicher benötigen, als wenn Sie die Funktionen alle eine Variablenreferenz teilen würden. – Chuck

0

Sie tun es für die Lesbarkeit.

Wenn Sie eine Referenz wie obj.child.prop1.prop2.prop3 es ist eine gute Idee, es in einer Variablen zu speichern. Readabiliti ist wertvoller als einige kleinere Probleme.

Verwandte Themen