Le problème avec la réinitialisation canvas.width
, c'est qu'il réinitialise tous les canevas de l'état (par exemple, les transformations, la largeur de raie, strokeStyle, etc.) et que c'est très lent par rapport à clearRect.
Le problème avec l'aide d' ctx.clearRect(0,0,canvas.width,canvas.height)
, c'est que si vous avez modifié la matrice de transformation, vous probablement ne sera pas de compensation de la toile correctement.
La solution? Réinitialiser la matrice de transformation avant de compensation de la toile:
// Store the current transformation matrix
ctx.save();
// Use the identity matrix while clearing the canvas
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.clearRect(0, 0, canvas.width, canvas.height);
// Restore the transform
ctx.restore();
Edit:
Je viens de faire un certain profilage et (Chrome) c'est environ 10% plus rapide pour effacer un 300x150 (taille par défaut) toile sans réinitialisation de la transformation. Comme la taille de votre toile augmente cette différence sera en baisse.
C'est déjà relativement insignifiant, mais dans la plupart des cas, vous serez beaucoup plus que vous êtes à la compensation et je crois que cette différence de performances être hors de propos.
100000 iterations averaged 10 times:
1885ms to clear
2112ms to reset and clear