JavaScript FileReader使用了大量内存

时间:2012-05-02 12:15:43

标签: javascript html5 filereader

我的小项目有问题。 每当音乐播放器将新歌曲加载到播放列表中,或者您正在按下列表中的一首歌曲来播放它时,它会占用大量内存,并且在您将其关闭之前一直保持高位。我认为每次我使用文件读取器API它都使用内存,但我也用jDataView.js脚本加载ID3信息,我认为这也占用了大量内存。

你有没有任何建议,加载,存储和播放FileReader的歌曲,而不占用内存?我试过看看是否可以在使用后清除fileReader,但我找不到任何东西。我只在Chrome中测试过。

更新: 我已经测试了我的项目,并发现,当我试图加载数据串时它会占用内存。

reader.onloadend = function(evt) {
    if(typeof(e) != "undefined"){
        e.pause();
    }
    e = new Audio();
    e.src = evt.target.result; // evt.target.result call takes the memory
    e.setAttribute("type", songs[index]["file"].type);
    e.play();
    e.addEventListener("ended", function() { LoadAudioFile(index + 1) }, false);
};

有没有其他方法可以将数据加载到音频元素中?

1 个答案:

答案 0 :(得分:9)

这不是因为FileReader,而是因为您将音频元素的src属性设为1.33 * mp3filesize字符串。因此,src属性不是一个指向mp3资源的好短文件,而是base64编码的整个mp3文件。这是一个奇迹,你的浏览器没有崩溃。

您根本不应该使用FileReader读取该文件,而是从该文件创建一个blob URL并将其用作src。

var url = window.URL || window.webkitURL;

//Src will be like "blob:http%3A//stackoverflow.com/d13eb575-4863-4f86-8727-6400119f4afc"
//A very short string that is pointing to the original resource in hard drive

var src = url.createObjectURL( mp3filereference );

audioElement.src = src;