Estoy usando esta biblioteca para generar gifs ( https://github.com/jnordberg/gif.js ). Cuando genera un archivo gif en blob, lo hace en la memoria del navegador y no lo limpia después, acumulando archivos de modo que en el uso continuo sin actualizar, la página simplemente falla.
Puede replicarlo accediendo a su propia demostración aquí: ( http://jnordberg.github.io/gif.js/ ). Cuando abra la pestaña de red o fuentes, verá algunos blobs cargados allí, una vez que vaya a la página y regenere cualquier imagen de ejemplo cambiando sus propiedades (como calidad, etc.), generará nuevos blobs sin borrar el anterior unos.
Para mí es un gran problema porque estoy generando cientos de gifs animados pesados y la página falla, así que necesito encontrar una forma de eliminar estos blobs de la memoria. Idealmente, quiero poder hacer esto sin cambiar la biblioteca gif.js, ¿tal vez si puedo acceder a estos blobs por referencia de alguna manera?
¿Algunas ideas?
El ejemplo es olvidar liberar la URL del blob que se creó una vez que ya no la necesita.
Tenga en cuenta que lib no crea la URL del blob, por lo que la persona que llama a lib es responsable de crear y liberar el blob llamando a URL.createObjectURL() y URL.revokeObjectUrl()
let lastBlobUrl; var gif = new GIF({ workers: 2, quality: 10 }); // add a image element gif.addFrame(imageElement); // or a canvas element gif.addFrame(canvasElement, {delay: 200}); // or copy the pixels from a canvas context gif.addFrame(ctx, {copy: true}); gif.on('finished', function(blob) { // You have to call this when you no longer need that URL. if (lastBlobUrl) { URL.revokeObjectURL(lastBlobUrl) } lastBlobUrl = window.open(URL.createObjectURL(blob)); }); gif.render();