2017-07-05 3 views
0

Gibt es Funktions- oder Leistungsunterschiede zwischen den beiden folgenden Blöcken?Unterschied zwischen Bindung mit Kartenindex oder Punktnotation

<foo ng-if="bar['qux']"> 
<foo ng-if="bar.qux"> 

Macht es einen Unterschied, ob bar.qux ist/ist zunächst nicht definiert?

Hinweis: Ich verstehe vollständig, wie Objekte in reinem Javascript funktionieren. Dies ist keine Frage zu Javascript, es handelt sich um Unterschiede, die in AngularJS existieren könnten (wegen Parsing oder anderer Implementierungsdetails)

+0

Vielleicht wird dies Ihre Frage beantworten. Siehe die Antwort des Benutzers Alp: https://Stackoverflow.com/a/17295727/1735789 –

+0

Danke @RafaelGadottiBachovas. Aber wie gesagt, ich suche keine generische JS-Interpretation (sonst würde ich einfach mit Punktnotation gehen). –

+0

Offenbar gibt es keinen signifikanten Leistungsunterschied zwischen Klammern und Punktnotation wie https://stackoverflow.com/a/30975165/4488121, aber ich weiß nicht über angularjs Ausdrucksparser, es könnte ein Problem sein. Aber von der funktionalen Seite können Sie mit der Klammernotation Eigenschaften verwenden, die mit ungültigen Bezeichnern wie bar ['2foo'] benannt sind, die Sie nicht mit Punktnotation ausführen können, die nur gültige Bezeichner unterstützt. –

Antwort

1

Ich habe einen richtigen jsPerf-Testfall erstellt, um sicher zu gehen, welche Notation analysiert würde schneller und die Ergebnisse zeigen, dass Punktnotationen um etwa 6% schneller sind als Klammern.

JsPerf Testfall: https://jsperf.com/test-angularjs-parse-speed.

Die Punktnotation ist schneller, die Leistungsunterschiede scheinen jedoch zu gering zu sein, so dass Sie auswählen können, welche davon basierend auf dem, was für Sie (oder Ihr Team) lesbarer und praktischer ist. Da beide in mehr als 10.000.000 Operationen pro Sekunde ausgeführt werden, würde 7% kein Leistungsproblem für Ihre App für einen solchen einfachen Ausdruck verursachen.

0

Mit Punktnotation ändert sich die Objektbeziehung nach der Initialisierung nie seit den periodischen Aufrufen.

+0

Ich verstehe nicht, was Sie sagen wollen. –

+0

Ich sagte, wenn wir die Punktnotation verwenden, analysiert 'DOM' das Objekt sehr schnell, verglichen mit der Klammernnotation nach ihrer Initialisierung. Wenn im Objekt periodische Änderungen auftreten. –

Verwandte Themen