Ich habe eine Frage zur Performance für Angular 1.x. Gibt es Leistungsvorteile bei der Verwendung von Funktionsausdrücken gegenüber Filtern, um Werte basierend auf Schlüsseln zu erhalten? Lass mich das mit Beispielen erklären.Angular Performance - Filter vs Funktion Ausdruck
Ich habe derzeit eine komplexe Winkelanwendung mit einer Anzahl von Filtern, die verwendet werden, um Werte basierend auf einem Objektschlüssel zu erhalten. Ich habe viele Schlüssel-/ID-Referenzen in meinen Daten, daher verwende ich einen Filter, um Feldwerte basierend auf dem Schlüssel zu erhalten.
E.g. {{ ID123 | getField:'object':'field'}}
Der benutzerdefinierte Filter würde dann einen asynchronen Aufruf tun (DB) die Objektname mich auf dem Schlüssel angeben, erhält basierend (ID123) und zurück, das Feld I (statt nur zeigt den Schlüssel) angeben.
Ich bin gerade dabei, etwas Leistung sauber zu machen, und ich habe viel über das Vermeiden von Filtern gelesen, da sie ein Schlag auf Leistung sind. Eine Sache, die ich mache, ist die Verwendung einmaliger Bindungen {{::ID123 | getField:'object':'field'}}
, aber in einigen Szenarien kann ich das nicht tun (da ich den Wert zum Aktualisieren benötige).
Ich sah dann Funktionsausdrücke anstelle von benutzerdefinierten Filtern, z. {{getField(ID123,'object','field')}}.
Aber ich bin mir nicht sicher, ob es irgendwelche Leistungsvorteile bekommen würde.
Sie können mein Beispiel sehen, wo ich die beiden vergleiche.
https://plnkr.co/edit/hlL2LSOGjq5HsImUyqyu?p=preview
Würde es irgendwelche Performance-Vorteile sein? Gibt es auch eine Möglichkeit, den Unterschied zwischen den beiden zu testen oder zu messen?
Dank
"gibt es eine Möglichkeit, b zu testen Enchmark den Unterschied zwischen den beiden "... Es gibt eine Menge Fragen darüber, wie dies zu tun, einschließlich [dieser auf Stack Overflow] (http://stackoverflow.com/q/27396539/215552). In Bezug auf welche Leistungsvorteile gibt es? Da Sie bei jedem Aufruf des Filters oder der Funktion einen asynchronen Anruf ausführen, vermute ich, dass der Filter oder die Funktion nicht Ihr Flaschenhals ist. Es ist der Async-Aufruf. Sie sollten Ihre Abfragen so strukturieren, dass die Informationen alle gleichzeitig angezeigt werden. –
Stellen Sie sicher, dass Sie verstehen, wie Digest-Zyklen funktionieren. Viele Aufschlüsse können in jedem Zyklus durchgeführt werden. Asynch-Aufrufe machen jeder Digest ist überhaupt nicht effizient – charlietfl
Ich cache die Async-Aufrufe, so dass jeder Digest Zyklus überprüft den Cache und macht nur den Async-Aufruf, wenn es keinen Cache gibt. Was die Leistung anbelangt, mache ich mir mehr Sorgen über die Anzahl der Digest-Aufrufe, die die Filter verursachen. Einige Seiten haben 20-30 dieser Filter. Während eines Verdauungszyklus werden sie alle gerufen. Werden die Funktionen auch bei jedem Digest-Zyklus aufgerufen? –