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.width
iş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
, rotate
ya da translate
daha 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
clearRect
Dö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 .