У меня есть 2 canvas
элементов, и я рисую их в интервале 125 мс.HTML5 Проблема с потерей памяти холста
Оба они должны быть полностью перерисованы из-за характера их работы, поэтому невозможно увеличить только некоторые части из них, чтобы повысить производительность.
Проблема
Когда я вижу в диспетчере задач, Рабочая Set (Memory) постоянно увеличивается, на основе того, насколько быстро я перерисовывая холсты.
То, что я пытался до сих пор
Используйте clearRect для очистки (в отличие, чтобы установить это снова ширина)
Пробовал удалить родительский DIV холста и воссоздании DIV и загрузка холст в нем: это помогает замедлить увеличение памяти, но не полностью ее останавливает.
Уменьшение различных context.fills как можно меньше, но опять же из-за природы холста, у него все еще есть много таких.
Даже если я все это делаю, рабочий набор может быть высоким, но не должен постоянно увеличиваться.
Любые предложения по управлению утечкой памяти?
Обновление: Утечка не в полотне чертежи. Я использую веб-исполнителя для передачи данных на холст, который где-то протекает. Извините за путаницу!
Tough знать, не видя кода, хотя JS утечки памяти часто вращается вокруг неснятых слушателей событий. Что касается проблемы с переутомлением, вы можете сложить несколько холстов друг на друга и перерисовать только те, которые в ней нуждаются (хотя пользователь может взаимодействовать только с верхним слоем). Я бы предположил, что вы, возможно, создаете закрытие в своем перерисовке fn и переназначение ваших данных изображения на повторное количество закрытых локальных варов. –
«Оба они должны быть полностью перерисованы из-за характера их работы» Вы уверены, что не можете разобрать рисунки на нескольких холстах, которые не нужно обновлять в каждом кадре? Таким образом, вы можете просто использовать 'drawImage()', который является одним из самых быстрых методов на холсте. – Kaiido
Точка @JaredSmith стоит копать. Мне также интересно, если вы думаете об использовании beginPath: вы знаете, что если вы этого не сделаете, путь будет расти? Показать код, потому что в противном случае это трудно сказать. – GameAlchemist