Optimisation du FCP/LCP en mettant en cache les recherches de modules raw-view

lookupView-patch

Implémenté maintenant via Map au lieu de Array.

Temps passé au démarrage de l’application dans lookupView - pour une instance de développement :

Temps économisé : ~115 ms

Cela réduit le temps passé dans appendOutletView de 1,083 ms à 946 ms - pour une instance de développement.


patch sur les helpers handlebar bruts

Oui, c’est en fait un copier-coller avec un changement : utiliser une vérification peu coûteuse pour isPath.

      // remplace @ember/-internals/utils isPath
      // @see: https://github.com/emberjs/ember.js/blob/3537670c14883346e11e841fcb71333384fcbc87/packages/%40ember/-internals/metal/lib/path_cache.ts#L5-L7
      // @see: https://github.com/emberjs/ember.js/blob/255a0dd3c7de1187f4a2f61a97cf78bfff8f66a8/packages/%40ember/-internals/glimmer/lib/utils/bindings.ts#L70
      let isPath = context.indexOf('.') > -1;

Par exemple, renderTopicListItem déclenche finalement de nombreux appels à _getPath (encore 50-100 ms à économiser) :
Firefox Profiler (callstack filtré sur _getPath à l’intérieur de renderTopicListItem)

Peut-être que les appels coûteux à _getPath sont quelque chose à optimiser dans Ember.js et non dans Discourse.


Et consultez Firefox Profiler pour avoir un aperçu de l’exécution JavaScript :