我有一个获取用户本地目录的代码,然后为它在目录中找到的每个 mp3 文件打开一个文件读取器对象。有时这可能超过 1,000 个文件。我将如何优化此代码以使其不会使浏览器崩溃?它非常适用于其中包含多达 200-300 个文件的目录,但会使浏览器崩溃,而控制台日志中没有任何错误。任何建议将不胜感激。这是我的代码的 jsFiddle 页面的链接:http: //jsfiddle.net/X6BZe/
filecount 变量用于尝试将文件分成 10 个一组,并使用 settimeout 函数将它们分开,但这似乎不是很有效。我试过没有它仍然使浏览器崩溃。
这是我的代码的主要部分,其余的只是帮助检索 ID3 标记的 jDataView 代码。
$(document).ready(function(){
$("#file-input").on("change", function(e){
var thefiles = e.target.files;
var filecount = 0;
$.each(thefiles, function(i, item){
if(item.type == "audio/mp3"){
var reader = new FileReader();
reader.onload = function() {
var dv = new jDataView(this.result);
if (dv.getString(3, dv.byteLength - 128) == 'TAG') {
var title = dv.getString(30, dv.tell());
var artist = dv.getString(30, dv.tell());
var album = dv.getString(30, dv.tell());
var year = dv.getString(4, dv.tell());
$("#thelist").append(title + " - " + artist + " - " + album + " - " + year + "<br />");
}
else {// no ID3v1 data found.
var title = "????";
var artist = "????";
var album = "????";
var year = "????";
}
dv = "";
}
reader.readAsArrayBuffer(thefile);
}
filecount += 1;
if(filecount == 10){
setTimeout(function(){}, 1000);
filecount = 0;
}
});
});