我有一个大约60个音频文件的数组(每个约3分钟)。我遍历这个数组 - 为每个项目创建一个OfflineAudioContext然后进行一些过滤和处理,如下所示:
var request = new XMLHttpRequest();
request.open('GET', audioFile.source, true);
request.responseType = "arraybuffer";
request.onload = function(){
context.decodeAudioData(request.response, function(buffer) {
audioFileBuffer = buffer;
offlineContext = new OfflineAudioContext(1, buffer.length, buffer.sampleRate);
//do some processing
//do some checks
}
}
即使没有任何处理或检查'这将导致浏览器在30分左右崩溃。我已经尝试慢慢浏览阵列(按钮点击每个项目),但浏览器仍会在此阈值附近崩溃。
处理后&检查是完成offlineContext并且不再需要用于创建它的任何东西 - 这是否仍占用内存并导致浏览器崩溃?
编辑:更改了代码以测试更具体的区域,并且看起来离线音频上下文将仅崩溃chrome,以下测试将完成opera,ff&的所有1000次运行。野生动物园,但在铬约170时会崩溃。
for(i=0; i<1000; i++){
var off = new webkitOfflineAudioContext(1, 1764000, 44100);
console.log(i);
}
Chrome提供错误:&#34;未捕获NotSupportedError:无法构建&#39; OfflineAudioContext&#39;:OfflineAudioContext(1,1764000,44100)&#34;如果刷新页面,则会崩溃
答案 0 :(得分:3)
没有看到所有周围的代码,我无法说清楚。你可以删除decodeAudioData调用,只创建30+给定长度的OfflineAudioContexts,看它是否有相同的问题? (即不要加载缓冲区)。
答案 1 :(得分:0)
OfflineAudioContext
在我意外创建一个24倍太长的页面时崩溃了我的页面。
我认为如果您创建的太多,或创建一个太长的,它会立即崩溃,因为它没有足够的内存。
尝试垃圾收集,或者按顺序一次一个地进行垃圾收集。