在桌面浏览器上运行下面的代码段并选择超过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手动拆分为所需的块。