L'un des moyens possibles de réduire la charge sur le CPU est d'utiliser une méthode appelée null transform hack
qui est souvent salué comme une sorte de balle d'argent . Dans de nombreux cas, il améliorera considérablement les performances de rendu dans les navigateurs WebKit et Blink comme Chrome, Opera et Safari.
Utilisation du "Null transform hack" (un mode de compositing matériel)
Le hack de la transformation nulle fait essentiellement deux choses :
- Il allume le mode de composition matérielle (en supposant qu'il soit supporté par la plateforme)
- Il crée une nouvelle couche avec sa propre surface d'appui
Pour "forcer" un navigateur, il suffit d'ajouter l'une de ces propriétés CSS à l'élément :
transform: translateZ(0);
/* or its friend: */
transform: translate3d(0, 0, 0);
Lorsque vous travaillez avec des transformations 3D, il est bon d'avoir également ces propriétés pour améliorer les performances :
backface-visibility: hidden;
perspective: 1000;
Mises en garde concernant le "hack de la transformation nulle".
L'activation d'une accélération matérielle en CSS3 pour un grand nombre d'objets peut ralentir les performances ! Apparemment, chaque transformation 3D nulle crée une nouvelle couche. Cependant, forcer la création de couches n'est pas toujours la solution à certains goulots d'étranglement en matière de performances sur une page. Les techniques de création de couches peuvent améliorer la vitesse de la page, mais elles ont un coût : elles occupent de la mémoire dans la RAM du système et sur le GPU. Ainsi, même si le GPU fait un bon travail, le transfert de nombreux objets peut poser problème, de sorte que l'utilisation de l'accélération GPU n'en vaut peut-être pas la peine. La citation de W3C :
Cependant, la mise en place de l'élément dans un nouveau calque est une opération relativement coûteuse, qui peut retarder le démarrage d'une animation de transformation d'une fraction de seconde appréciable.
Le déplacement de quelques gros objets est plus performant que le déplacement d'un grand nombre de petits objets avec l'accélération 3D. Donc ils doivent être utilisés à bon escient et vous devez vous assurer que l'accélération matérielle de votre opération améliorera réellement les performances de votre page et que le goulot d'étranglement n'est pas causé par une autre opération sur votre page.
De plus, un GPU est conçu spécifiquement pour effectuer les calculs mathématiques/géométriques complexes, et décharger les opérations sur l'ordinateur de l'utilisateur. Le GPU peut entraîner une consommation massive d'énergie . Évidemment, lorsque le matériel entre en jeu, la batterie de l'appareil cible l'est aussi.
La voie moderne : le will-change
propriété
Le progrès ne se trouve pas à un seul endroit... Le W3C a introduit le will-change
Propriété CSS. Pour faire court, la propriété will-change
vous permet d'informer le navigateur à l'avance des types de modifications que vous êtes susceptible d'apporter à un élément, afin qu'il puisse mettre en place les optimisations appropriées avant qu'elles ne soient nécessaires.
Voici ce qu'ils disent dans le projet :
En will-change
définie dans cette spécification permet à un auteur de déclarer à l'avance quelles propriétés sont susceptibles de changer à l'avenir, afin que l'UA puisse mettre en place les optimisations appropriées quelque temps avant qu'elles ne soient nécessaires. De cette façon, lorsque le changement réel se produit, la page est mise à jour rapidement.
Utilisation de will-change
Pour indiquer au navigateur une transformation à venir, il suffit d'ajouter cette règle à l'élément qui doit être transformé :
will-change: transform;
Lorsqu'ils développent des applications mobiles, les développeurs sont obligés de prendre en compte les nombreuses contraintes des appareils tout en écrivant des applications web mobiles. Les navigateurs deviennent de plus en plus intelligents et, parfois, il vaut mieux laisser la décision à la plate-forme elle-même, plutôt que de superposer les accélérations et de forcer le comportement de façon fantaisiste.