ユーザーのローカル ディレクトリを取得し、ディレクトリで見つかった各 mp3 ファイルの filereader オブジェクトを開くコードがあります。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;
}
});
});