首页 > 解决方案 > 在 Web 应用程序中从大文件中读取许多小文件

问题描述

我正在开发一个网络应用程序,它需要从一个大文件(~1TB)中执行许多小读取(5000 万次读取,每个几百字节)。我尝试了不同的方法,包括在网络工作者中使用 FileReaderSync

onmessage = function(e) {
  const reader = new FileReaderSync();
  for (let i = 0; i < N_READS; i++) {
    const sliceStart = i * BYTES_BETWEEN_READS;
    const sliceEnd = sliceStart + BYTES_TO_READ;
    const sliceToRead = e.data.slice(sliceStart, sliceEnd);
    reader.readAsArrayBuffer(sliceToRead);
  }
}

e发送给包含 的网络工作者的消息在哪里File)但性能很糟糕(比原生 C 应用程序慢很多倍)。我怀疑这是因为访问浏览器提供的沙盒文件系统需要每次读取都经过检查以减慢速度。读取不是连续的,仅覆盖文件中大约 1% 的字节,因此我认为以较少数量的大块读取整个文件然后从中提取所需数据(丢弃其余的读取的字节数)。是否有更高性能的方法可以从 Web 应用程序以这种方式访问​​文件?

标签: javascriptweb-applications

解决方案


推荐阅读