2016-06-03 4 views
0

ich zur Zeit auf die Leistung eines AngularJS Anwendung zu arbeiten, und habe mich gefragt, ob es einen Unterschied in der Leistung zwischen diesen beiden Beispielen ist:maximieren Wirksamkeit von Einmal Bindungen

http://plnkr.co/edit/T5aHybkkCoF5MDzXX2Kk?p=preview

http://plnkr.co/edit/sX2ffPPOQTyFbb70elwp?p=preview

der Unterschied ist, dass in dem ersten Beispiel wird in der Datei ‚testdirective.html‘ die ng-if boolean in einem einmal Ausdruck nicht gebunden. In der 'index.html' ist es jedoch bereits als einmaliges Bindeglied gebunden.

<div ng-if="enabled"> 
     vs 
<div ng-if="::enabled"> 

Verwenden Sie einen einmaligen Ausdruck in der Direktive sowie in der Indexdatei besser für die Leistung?

Danke!

+0

Hat Ihnen das geholfen? – tasseKATT

+1

Ja Entschuldigung, vergessen zu markieren als Antwort! – jlast

Antwort

1

Ja, es wird ein Unterschied in der Leistung (wenn auch unbedeutend in diesem Fall) sein.

Die Anweisung berücksichtigt nicht, ob der übergebene Wert einmal gebunden war oder nicht. Wenn also die Vorlage der Direktive keine einmalige Bindung verwendet, registriert sie einen neuen Watcher.

Die Kosten für diese Beobachter während des Digest-Zyklus ausgeführt wird bascially der Unterschied in der Leistung in den beiden Beispielen sein.

Eine zusätzliche Note auf Ihrem Beispiel, das nicht wirklich die Frage in Berührung kommt, ist, dass die folgenden beiden Fälle gleich verhalten werden:

<testdirective enabled="::true"></testdirective> 

Und

<testdirective enabled="true"></testdirective> 

Im zweiten Fall wird true werden als konstante behandelt, die nicht geändert werden kann und die registrierten Beobachter werden entfernt, genau wie bei einem einmaligen Bindung.