readAsArrayBuffer在移动设备上非常慢

时间:2018-01-11 19:35:24

标签: javascript filereader

在桌面浏览器上运行下面的代码段并选择超过10MB的任何文件。您将获得大约4MB / s的读取速度。如果你在Android的移动Chrome上运行它,你将获得接近90Kb / s的东西。

有没有办法可以改进?

P.S。 我正在使用sliceFile从移动设备上通过RTCDataChannel发送BufferArray。

function load() {

  function bytesToSize(bytes) {
    var sizes = ['Bytes/s', 'KB/s', 'MB/s', 'GB/s', 'TB/s'];
    if (bytes < 1) return '';
    var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
    return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
  }


  var reader = new window.FileReader();
  var offset = 0;
  var f = window.event.target.files[0];
  proggress.max = f.size;
  reader.onload = read;

  function read() {
    if (offset < f.size) {
      var currentSlice = f.slice(offset, offset + 16384);
      offset += 16384;
      reader.readAsArrayBuffer(currentSlice);
      proggress.value = offset;
    }
  }

  var lastOffset = 0;
  setInterval(function () {
    var s = bytesToSize(offset - lastOffset);
    if (s) {
      currSpeed.textContent = s;
    }
    lastOffset = offset;
  }, 1000);
  read();
}
<progress id="proggress"></progress>
<div id="currSpeed"></div>
<input type="file" value="click" onchange="load()"/>

更新

我最终切割了更大的块并将它们从ArrayBuffer手动拆分为所需的块。

0 个答案:

没有答案