2017-08-28 1 views
0

Je lis beaucoup (pour l'étude) sur « délégation de l'événement » et aussi parce que dans cette vidéo: https://www.youtube.com/watch?v=udix3GZouik (minute 22:28) Alex Blom parle de: « Coalesce auditeurs similaires » pour des raisons de performance.Ember 2 performances, est la délégation d'événement javascript dans #each automagically? Comment fusionner des auditeurs similaires?

enter image description here

Ma question est: Ember effectue automagiquement sur ce problème?

Si j'ai un #each avec beaucoup div comment coalesce auditeurs sur la div parent? Est-ce que Ember le fait à ma place?

https://davidwalsh.name/event-delegate

Répondre

1

Intéressant ici est la différence entre actions classiques et les actions de fermeture. Tout d'abord permet de les montrer à la fois:

action classique

<button {{action 'foo'}}>foo</button> 

action fermeture

<button onclick={{action 'foo'}}>foo</button> 

Ces deux presque identiques ont un comportement, mais sont très différents. L'action classique n'attache pas un écouteur d'événement à l'élément lui-même. Au lieu de cela, l'événement click apparaîtra dans l'élément racine de l'élément ember, et l'élément saisira l'action à appeler. Ainsi, pour les actions classiques, les ember vont fusionner les auditeurs sur la div de racine. C'est pourquoi vous ne pouvez utiliser qu'une liste d'événements prédéfinis, pour lesquels les écouteurs sont attachés à la div racine. Cependant, les actions de fermeture sont simplement une fonction de fermeture simple directement attachée à l'écouteur d'élément. Donc, ici, braise fera beaucoup moins de magie, mais attacher un auditeur distinct pour chaque onclick=. Cependant, il est intéressant de noter que les braises se tournent vers les actions de fermeture pour une meilleure expérience de développement. Cela suggère donc que les développeurs d'ember pensent que ce n'est plus une question de performance. D'après mon expérience, la réduction du nombre d'auditeurs n'est pas un bon moyen d'améliorer les performances. Un peu plus d'auditeurs n'aura pas d'effet dramatique sur la performance, mais vous donnera une meilleure expérience de développement et de débogage. Donc, pour une liste de plus d'une demi-douzaine d'articles, ce n'est pas vraiment une préoccupation. De vrais problèmes viennent avec énormément d'auditeurs, seulement si vous rendez quelque chose comme de très longues listes, beaucoup plus grandes que la fenêtre d'affichage. Dans ces cas, c'est une bien meilleure idée de réduire DOM, et pas seulement les auditeurs. Ici, je recommande des outils tels que vertical-collection et smoke and mirrors (SAM)

+0

je respecte beaucoup (vous avez une expérience fabuleuse et sont toujours très utiles), je comprends parfaitement votre point de vue, mais ne pensez-vous pas que même cette douzaine moins d'événements sur un smartphone faire la différence? –

+1

J'aimerais voir des repères avec braise ici! [Ceci est intéressant] (https://jsperf.com/jquery-event-delegation/5). Mais je pense généralement qu'il y a toujours d'autres choses à optimiser en premier. De plus, je ne suis pas sûr que les écouteurs d'événements soient lents ou qu'ils trouvent les nœuds DOM.Parce que le dernier est quelque chose que nous n'avons pas à faire avec la lueur. Et je ne vois aucune raison pour laquelle les auditeurs d'événements devraient être lents. – Lux

+1

J'ai [joué un peu autour] (https://jsperf.com/many-event-listeners). – Lux