კანვასის ოპტიმიზირება
წინა სტატიებში განვიხილეთ თუ როგორ ვიმუშაოთ კანვასში. ამ სტატიაში კი განვიხილავთ იმ მიდგომებს, რომლის გამოყენებითაც უფრო ოპტიმიზირებული იქნება თქვენი კანვასი.
პრე-რენდერი მსგავსი ობიექტებისა და განმეორებადი ობიექტების
ხშირად შესაძლებელია დაგვჭირდეს ვიზუალზე ერთნაირი ელემენტების დარენდერება სხვადასხვა კანვასში,
ან იგივე კანვასში გარკვეული დროის შემდგომ. ასეთ დროს შეგვიძლია გამოვიყენოთ offscreenCanvas
თვისება,
რათა დავარენდეროთ ერთხელ შექმნილი კადრსმიღმა (off-screen) შედეგი მთავარ კანვასში იმდენჯერ, რამდენჯერაც დაგვჭირდება
და აღარ მოგვიწევს კოდის გამეორება.
myCanvas.offscreenCanvas = document.createElement('canvas');
myCanvas.offscreenCanvas.width = myCanvas.width;
myCanvas.offscreenCanvas.height = myCanvas.height;
myCanvas.getContext('2d').drawImage(myCanvas.offScreenCanvas, 0, 0);
მთელი რიცხვების გამოყენება
საბ-პიქსელების დარენდერება იწყება მაშინ, როცა დასარენდერებელ ობიექტს კანვასში არ აქვს მთელი რიცხვის მნიშვნელობა.
ctx.drawImage(myImage, 0.3, 0.5);
მსგავსი კოდი კანვასს აიძულებს ზედმეტი მოქმედებების შესრულებას და ამნის anti-aliasing-ის ეფექტს. ამისთვის თავის ასარიდებლად, შეგვიძლია მნიშვნელობა წინასწარ დავამრგვალოთ მათემატიკური მეთოდების გამოყენებით.
გამოიყენეთ CSS დიდი ბექგრაუნდ სურათების დასარენდერებლად
ხშირად გვიწევს კანვასზე რაღაც ბექგრაუნდ სურათის გამოსახვა. როცა იმავე კანვასზე ვანახლებთ ანიმაციას, გვიწევს იგივე ბექგრაუნდის ყოველ ჯერზე თავიდან დარენდერება, რაც არ არის ოპტიმალური. ასეთ დროს ჯობია CSS-ის გამოყენებით გავსტილოთ ბექგრაუნდი.
გათიშეთ გამჭვირვალობის ეფექტი
თუ არ ვაპირებთ კანვასში გამჭვირვალობის ეფექტის გამოყენებას, მაშინ უმჯობესია ის თავიდანვე გავთიშოთ.
გასათიშად საჭიროა alpha
თვისების false
-ზე დაყენება, როცა getContext
მეთოდს ვიყენებთ.
const ctx = canvas.getContext('2d', { alpha: false });
ზოგადი რჩევები
- აარიდეთ თავი კანვასის სტეითის ცვლილებებს, როცა შეგიძლიათ.
- დაარენდერეთ მხოლოდ სქრინის განსხვავები და არა მთლიანი ახალი სთეითი.
- თავი აარიდეთ
shadowBlur
გამოყენებას, როცა შეგიძლიათ. - თავი აარიდეთ ტექსტების დარენდერებას, როცა შეგიძლიათ.
- ცადეთ განსხვავებული მეთოდები კანვასის გასასუფთავებლად (
clearRect
,fillRect
და ზომის შეცვლად). - ანიმაციების გამოყენების დროს, ამჯობინეთ
window.requestAnimationFrame
გამოყენება, ვიდრეsetInterval
. - ყურადღებით გამოიყენეთ მძიმე ფიზიკის ბიბლიოთეკები, როცა იყენებთ ანიმაციებს.