Как удалить объекты холста из памяти с помощью JavaScript - PullRequest
0 голосов
/ 03 апреля 2020

Примечание: я отредактировал свой исходный пост, потому что проблема не в iOS, а в более общем плане.

Я создаю приложение с JavaScript, которое сокращает изображение на несколько частей через холст.

У меня есть два шага:

  1. Выбор изображения (из существующего или загрузка нового)
  2. Разрезать изображение на части используя canvas

Если я делаю процесс несколько раз, я замечаю, что в памяти создается много холстов. Я проверяю это, используя инструменты разработчика в Safari, а затем выбираю вкладку «Холст».
Проблема в том, что эти элементы холста действительно складываются. Если я сначала разрезаю изображение на 10 частей, а в следующем раунде я разрезаю на 20 частей, то в моей памяти останется 30 элементов холста.

Моя цель - удалить / очистить существующий Canvas, очистив память (или как лучше), потому что в противном случае я скоро столкнусь с проблемами с памятью.

Я уже пытался удалить Canvas, удалив его из DOM и установив для переменной значение null:

var myCanvas = document.getElementById('canvas');
myCanvas.parentElement.removeChild(myCanvas);
myCanvas = null;

Проблема здесь в том, что если я сейчас загружаю изображение с моего компьютера, холст все равно добавляется в память. Ранее вырезанные части (элементы холста) все еще там и не удалены:

enter image description here

Кроме того, поскольку я удалил элемент холста из DOM, нарезанный части больше не появляются на странице. Они находятся только на вкладке «Холст» в инструментах разработчика.

Я также пытался очистить холст:

// this.ctx is the canvas
this.ctx.clearRect(0, 0, this.ctx.canvas.width, 
this.ctx.canvas.height);
this.ctx.canvas.height = 0;
this.ctx.canvas.width = 0;
this.ctx = null;

Он каким-то образом сбрасывает холст, но не удаляет его из памяти, так что это бесполезно для меня.

Если я обновлю sh страницу, память, конечно, будет очищена, но я буду использовать это в мобильном приложении позже, так что это не вариант для меня.

Есть идеи, как это решить?
Заранее большое спасибо за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...