Je travaille sur un petit moteur de template JavaScript, et j'ai deux approches possibles pour traiter les mises à jour du DOM lorsque le modèle change:Est-ce que toucher le DOM déclenche une refusion et repeindre même si rien ne change?
Vérifiez si la mise à jour DOM est vraiment nécessaire avant de le faire. Cela a l'avantage de ne pas risquer des mises à jour inutiles, mais je gaspille de l'espace sur le suivi des anciennes valeurs.
if (oldValue !== newValue) { element.textContent = newValue; }
Faites-le. C'est évidemment plus simple, mais j'ai peur de déclencher des repaints et des remboursements sans raison.
element.textContent = newValue;
Notez que je manipulais aussi les DOM en appelant setAttribute
, addClass
et removeClass
, ainsi que la mise en style[prop] = value
.
Alors, ma question est: Est-ce que les navigateurs modernes assez intelligents pour remarquer que rien réellement changé, et donc pas courir refusion ou de repeindre, si vous touchez le DOM sans changer quoi que ce soit?
Les navigateurs sont très intelligents de nos jours. Aucun flux ne se produira s'il n'y a pas de changement, affichez sage. Et même alors, la repeinte ne sera appliquée qu'à la partie de l'écran affectée. –
* Je gaspille de l'espace * Oui, l'espace est à prime ces jours-ci, mon ordinateur de bureau ne dispose que de 32 Go de RAM. –
@torazaburo Garder une copie de toutes les valeurs liées dans un grand SPA est coûteux sur un appareil mobile, et si elles changent souvent, cela produit beaucoup de déchets qui doivent être collectés, ce qui gâche les cadrans. Ce n'est pas un gros effet, non, mais s'il n'y a pas de but, il y a peut-être encore quelque chose à gagner ici. – Anders