Mit One-Time Binding die Performance verbessern
angularjs | Tilman Potthof • | 1 Minute
Bidirektionales (Two-Way) Databinding gehört zum täglichen Brot eines Angular Entwicklers und ist eine bekannte Kernfunktion. Was ist nun das neue einmalige (One-Time) Databinding und welches Problem löst es?
Problem
Damit AngularJS Template-Elemente automatisch aktualisieren kann gibt es Beobachter-Funktionen(Watcher), die prüfen, ob sich Daten geändert haben. Diese Prüfung erfolgt nach Aktionen die den Aktualisierungszyklus von Angular auslösen, z.B. eine Änderung in einem Eingabefeld mit ng-model. Auch Variablen, die man definitiv nur einmal initialisieren möchte, werden in jedem Aktualisierungszyklus auf Änderungen geprüft. Je nach dem wie viele Beobachter-Funktionen es auf einer Seite gibt und wie komplex die Prüfungen sind, die sie ausführen müssen, kann dies die Reaktionsgeschwindkeit und somit Performance der Seite deutlich verschlechtern.
Lösung
Ab Angular 1.3 gibt es eine neuen Syntax für Template-Ausdrücke ::
. Statt {{ variable }}
kann man jetzt einfach {{ ::variable }}
schreiben und erreicht, dass die Beobachter-Funktion nach dem ersten Aktualisierungszyklus entfernt wird. Dadurch wird der Template-Ausdruck nicht mehr geprüft und das Element nicht mehr aktualisiert. Auf diese Weise kann man verhindern, dass AngularJS überflüssige Prüfungen durchführt und so die Reaktionsgeschwindigkeit seiner Seite potenziell verbessern. Wenn man Direktiven wie ng-if
oder ng-view
verwendet, dann gilt das einmal Databinding bei jeder neuen Initialisierung der jeweiligen Direktive.
Beispiel
Die einzelnen Punkte sollten am folgenden Beispiel klar werden. Wenn man einen Namen auswählt oder auf Rotieren klickt, dann zeigen beide Template-Ausdrücke den Namen an. Wiederholt man die Aktion,dann verändert sich nur noch der Ausdruck mit der klassischen Syntax. Anschließend kann man beide Elemente Ausblenden und da diese Funktion mit ng-if
umgesetzt ist, werden die Elemente beim Einblenden neu initialisiert und erhalten beide den aktuellen Wert der Variable selectedName
. Mit Zurücksetzen und Aus/Einblenden kann man den Ursprungszustand wiederherstellen.
Inhaltsverzeichnis
Um alle Neuigkeiten zu erfahren, abonniere hier unseren Newsletter!
Newsletter abonnierenTilman Potthof
Tilman Potthof ist begeisterter Softwareentwickler mit einem Fokus auf komplexe Frontend-Entwicklung. Während seines Studiums hat er sich intensiv mit JavaScript und Web-Frameworks beschäftigt. Aktuell arbeitet er als Software-Entwickler bei //SEIBERT/MEDIA und entwickelt dort Anwendungen mit AngularJS und JavaEE. Als Anhänger von Clean Code und TDD setzt er sich für kontinuierliche Verbesserungen von Code-Qualität und Entwicklungsprozess ein.