lookupView-patch
Implementiert jetzt über Map anstelle von Array.
Zeitaufwand beim Anwendungsstart in lookupView – für Entwicklungsinstand:
-
ohne Patch: 124 ms
Firefox Profiler (Callstack gefiltert nachlookupView) -
mit Patch: 9 ms
Firefox Profiler (Callstack gefiltert nachlookupView)
Gesparte Zeit: ~115 ms
Dies reduziert die Zeit, die in appendOutletView verbracht wird, von 1.083 ms auf 946 ms – für Entwicklungsinstand.
Patch bei Raw Handlebar Helpers
Ja, es ist tatsächlich ein Copy-Paste mit einer Änderung: eine günstige Prüfung für isPath verwenden.
// ersetzt @ember/-internals/utils isPath
// @siehe: https://github.com/emberjs/ember.js/blob/3537670c14883346e11e841fcb71333384fcbc87/packages/%40ember/-internals/metal/lib/path_cache.ts#L5-L7
// @siehe: https://github.com/emberjs/ember.js/blob/255a0dd3c7de1187f4a2f61a97cf78bfff8f66a8/packages/%40ember/-internals/glimmer/lib/utils/bindings.ts#L70
let isPath = context.indexOf('.') > -1;
Z. B. löst renderTopicListItem letztendlich viele Aufrufe von _getPath aus (weitere 50-100 ms Einsparung):
Firefox Profiler (Callstack gefiltert nach _getPath innerhalb von renderTopicListItem)
Vielleicht sind die aufwändigen Aufrufe von _getPath etwas, das in Ember.js und nicht in Discourse optimiert werden sollte.
Und werfen Sie einen Blick auf den Firefox Profiler, um Einblicke in die JavaScript-Ausführung zu erhalten: