음악 트랙을 재생할 때 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]를 만들 수 있습니까? –
예를 들어 - 문제가있을 수 있습니다. 주로 문제를 보여줄 별도의 최소 예를 만들어야하기 때문입니다. 그리고 그것은 당신이 파리에서 할 수있는 것이 아닙니다. 나는 오늘 저녁에 노력할 것이다. – North
메모리에 대한 참조는 다음과 같습니다 : 1. 캐시 - 우리가 청소하고 있습니다 2. node.source.buffer - 버퍼를 직접 지울 수는 없지만 node.source 변수. 그래서 문제를 해결해야합니다. 3. xhr 개체입니다. 요청은 전용 함수에서 수행되고 xhr.response는 self.ctx.decodeAudioData로 전달됩니다. 이 사건에 대한 추가 정리가 필요한가요? – North