kullanın: context.clearRect(0, 0, canvas.width, canvas.height);
Bu, tüm tuvali temizlemenin en hızlı ve en açıklayıcı yoludur.
Kullanmayın: canvas.width = canvas.width;
Sıfırlama canvas.widthişlemi tüm tuval durumunu sıfırlar (örn. Dönüşümler, lineWidth, strokeStyle, vb.), Çok yavaştır (clearRect ile karşılaştırıldığında), tüm tarayıcılarda çalışmaz ve gerçekte ne yapmaya çalıştığınızı açıklamaz.
Dönüştürülmüş koordinatlarla başa çıkmak
Eğer dönüşüm matrisi değiştirilmiş olan (örneğin kullanılarak scale, rotateya da translatedaha sonra)context.clearRect(0,0,canvas.width,canvas.height) muhtemel tuvalin tamamını görünür kısmını temizlemez.
Çözüm? Tuvali temizlemeden önce dönüşüm matrisini sıfırlayın:
// Store the current transformation matrix
context.save();
// Use the identity matrix while clearing the canvas
context.setTransform(1, 0, 0, 1, 0, 0);
context.clearRect(0, 0, canvas.width, canvas.height);
// Restore the transform
context.restore();
Düzenleme:
Biraz profilleme yaptım ve (Chrome'da), dönüşümü sıfırlamadan 300x150'lik (varsayılan boyut) bir tuvali temizlemek yaklaşık% 10 daha hızlı. Tuvalinizin boyutu arttıkça bu fark düşer.
Bu zaten nispeten önemsiz, ancak çoğu durumda, temizlediğinizden çok daha fazla çizeceksiniz ve bu performans farkının önemsiz olduğuna inanıyorum.
100000 iterations averaged 10 times:
1885ms to clear
2112ms to reset and clear
clearRectDönüştürülmemiş bir içeriğe sahip olmanız veya gerçek sınırlarınızı takip etmeniz gerektiğini unutmayın .