Я использую WebAudio для воспроизведения музыкальных треков. Во-первых, я полностью расшифровать его сПравильный способ очистки памяти от декодированного аудиопотока (мобильный)
self.ctx.decodeAudioData(xhr.response, function (buffer) {
this.cache = buffer;
})
и сохранить декодированного буфер некоторой переменной в течение времени, когда мне нужно, чтобы начать играть.
Когда я хочу, чтобы переключить трек, я очистки аудио узел с
node.source.onended = function (value) {
node.source = null;
};
и кэш:
this.cache = null;
и декодировать следующий трек той же переменной ,
Проблема заключается в том, что я несколько раз переключаю дорожку (например, 3-4 трека 3мин), мобильные браузеры на базе iOS просто перезагружают страницу, поскольку, кажется, я использую всю доступную память для вкладки , Хотя я использую только одну переменную буфера, я думаю, сборщик мусора не освобождает память аудио буферов, которые я больше не использую.
Любые идеи по улучшению реализации?
Вы уверены, что * вы освободили * каждую * ссылку на память, включая объект 'xhr'? Можете ли вы сделать [mcve], чтобы продемонстрировать проблему. –
Как например - это может быть проблематично tbh. В основном потому, что мне нужно создать отдельный минималистский пример, который покажет проблему. И дело не в том, что вы можете сделать на лету tbh. Я постараюсь сегодня вечером. – North
Что касается ссылки на память - у нас есть 3 из них, как я вижу: 1. Кэш - мы его очищаем 2. node.source.buffer - мы не можем напрямую очистить буфер, но мы очищаем переменная node.source. Поэтому он должен заботиться о проблеме. 3. объект xhr. Запрос выполняется в частной функции, а xhr.response передается в self.ctx.decodeAudioData. Нужна ли нам дополнительная очистка для этого случая? – North