Prerender sur toile 2D

Dans les tentatives d'optimisation de l'animation 2D créée dans le canevas, une option intéressante a été trouvée.


image de héros


Visualisation préliminaire - pré-rendu.


"Et si vous enregistrez toutes les images à l'avance et les montrez aprÚs la fin de l'animation?" - Nous avons pensé avec un ami et c'est ce qui s'est passé le lendemain.


DĂ©mo en direct


amedomary.ru/prerender-canvas


Code v1.0


La page elle-mĂȘme est sur Github .


La logique est trÚs simple et est implémentée en 2 étapes:


Étape 1 - Enregistrez chaque image de notre animation dans un tableau d'images


Étape 1 - Code Javascript
  function renderLoop() {
    draw();

    // create prerender images
    canvasPrerender.toBlob(blob => {
      const reader = new FileReader();
      reader.readAsDataURL(blob);

      reader.onload = function() {
        const image = document.createElement("img");
        image.src = reader.result;
        prerenderArr.push(image);
      };
    });

    if (prerenderIsCompleted) {
      requestAnimationFrame(renderLoop);
    } else {
      requestAnimationFrame(drawPreImg);
    }
  }

2 — —


2 - javascript
  function drawPreImg() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(prerenderArr[i], 0, 0);

    requestAnimationFrame(drawPreImg);
  }


Analytic


. macbook 13 2019 .


.


FPS


Fps "" .


Fps "" (prerender): 14-22
Fps "" ( ): 58-60


compteur fps

, live demo.



Prerender — 9
— 3
— 12 ( live demo)


CPU / Performance


Comme le montre la capture d'écran ci-dessous - notre processeur ne souffre qu'au stade de la prérender. Dessiner des images toutes faites n'est pas difficile.


Performance - Capture d'Ă©cran

performance


MĂ©moire


Pour une petite animation comme la nĂŽtre, tout cela prend:
~ 432/2 = 200 images
~ 25 mb


performance


Conclusion


Si vous avez la possibilité d'attendre avant de montrer l'animation à l'utilisateur et qu'elle ne consommera pas de gigaoctets de mémoire, essayez de faire quelque chose comme ça.


PS


Si vous avez des idées pour améliorer les performances de cette approche - écrivez :)


All Articles