Mise à jour : Chrome 58+ a masqué ces messages de débogage et d'autres par défaut. Pour les afficher, cliquez sur la flèche située à côté de "Info" et sélectionnez "Verbose".
Mise à jour 2 : Chrome 57 a activé la fonction "masquer les violations" par défaut. Pour les réactiver, vous devez activer les filtres et décocher la case "masquer les violations".
il apparaît soudainement lorsque quelqu'un d'autre impliqué dans le projet
Je pense qu'il est plus probable que vous ayez mis à jour vers Chrome 56. Cet avertissement est une nouvelle fonctionnalité (à mon avis) merveilleuse - ne le désactivez que si vous êtes désespéré et votre évaluateur vous enlèvera des points. Les problèmes sous-jacents sont présents dans les autres navigateurs, mais ces derniers ne vous en informent pas. Le ticket Chromium est ici mais il n'y a pas vraiment de discussion intéressante à son sujet : https://bugs.chromium.org/p/chromium/issues/detail?id=662497
Ces messages sont des avertissements et non des erreurs, car ils ne posent pas vraiment de problèmes majeurs. Il se peut que des images soient perdues ou que l'expérience soit moins fluide.
Ils méritent cependant d'être examinés et corrigés pour améliorer la qualité de votre application. Pour ce faire, il convient de prêter attention aux circonstances dans lesquelles les messages apparaissent et de procéder à des tests de performance pour déterminer où le problème se produit. La façon la plus simple de commencer à tester les performances est d'insérer un code comme celui-ci :
function someMethodIThinkMightBeSlow() {
const startTime = performance.now();
// Do the normal stuff for this function
const duration = performance.now() - startTime;
console.log(`someMethodIThinkMightBeSlow took ${duration}ms`);
}
Si vous voulez aller plus loin, vous pouvez également utiliser le profileur de Chrome : https://developers.google.com/web/tools/chrome-devtools/rendering-tools/
Vous pouvez aussi utiliser une bibliothèque d'évaluation comparative comme celle-ci : https://benchmarkjs.com/
Une fois que vous avez trouvé un code qui prend beaucoup de temps (50 ms est le seuil fixé par Chrome), vous avez plusieurs options :
- Supprimez une partie ou la totalité de cette tâche qui n'est peut-être pas nécessaire.
- Trouver comment effectuer la même tâche plus rapidement
- Diviser le code en plusieurs étapes asynchrones
(1) et (2) peuvent être difficiles ou impossibles. Mais parfois vraiment faciles et devraient être vos premières tentatives. Si nécessaire, il devrait toujours être possible de faire (3). Pour ce faire, vous utiliserez quelque chose comme
setTimeout(functionToRunVerySoonButNotNow);
ou
// This one is not available natively in IE, but there are polyfills available.
Promise.resolve().then(functionToRunVerySoonButNotNow);
Vous pouvez en savoir plus sur la nature asynchrone de javascript ici :
http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/