【问题标题】:ElectronJS cacheElectronJS 缓存
【发布时间】:2020-12-24 19:03:29
【问题描述】:

我正在使用 Electron JS 和 react JS 构建一个离线应用程序。 启动步骤中,首先是加载一个大文件(超过 1 GB 且无法拆分) 所以我必须等待大约 50-60 秒,直到这个文件完全加载。 有没有办法在第一次启动时加载它,然后将其保存到缓存中,这样下次我启动我的应用程序时就不会花费那么多时间了?

【问题讨论】:

  • 负载是什么意思?你的意思是从远程服务器下载到本地机器或从硬盘加载到内存?
  • @hackape 它是一个本地文件(JSON 文件)。由于这个文件很大,所以不能用 fs 读取文件或其他包来读取。所以我不得不通过 fs readstream 阅读它,这个过程花费了很多时间。这就是我所说的“加载它”

标签: javascript node.js electron service-worker


【解决方案1】:

在下一次应用启动之前,您无法将数据缓存在内存中。当应用程序关闭时,数据就消失了。 解决的方法不多:

方法一(缓存数据直到应用关闭):

在启动时异步读取文件(因此它不会冻结应用程序),并通过将数据存储在变量中将其缓存在内存中。该应用程序将占用超过 1GB 的 RAM,并且当应用程序关闭时缓存将消失。

方法二(分块读取数据):

您需要同时处理整个数据集吗?如果没有,请不要读取整个文件,将其分成多个块(文件)并在运行时需要时读取特定文件。

方法3(边读边计算):

您只需要数据来计算一次,使用流从驱动器中读取 json,并在流期间对每个 JSON 对象实时执行计算。在流结束时,所有需要的计算都将完成,应用程序将不需要约 1 GB 的 RAM。为此有几个模块:stream-jsonbfjbig-json

【讨论】:

    【解决方案2】:

    通常您一开始就不需要整个文件。您能否分享这个大文件的性质以帮助更好地理解问题?

    无法在内存中“缓存”,应用退出时内存会被清空。这就是记忆的工作原理。

    但问题是,将 1GB 读入内存不应该花费 60 秒,那太长了。我想您还需要找出其他瓶颈。

    我的建议是尝试同步读取文件,并测量实际花费的时间。您可以使用 Node.js 的 "perf_hooks" 内置模块来测量时间。我的猜测,将文件加载到内存中最多大约 1 秒,所以 59 秒用于做一些其他的事情。问题很可能出在其他地方。

    现在,如果瓶颈确实是将文件从磁盘加载到内存中,那么mmap syscall 可能就是您所需要的。不过那是另一个话题了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-08
      • 2022-06-15
      • 1970-01-01
      • 2019-01-19
      • 2021-08-05
      • 2020-12-01
      • 2018-10-06
      • 1970-01-01
      相关资源
      最近更新 更多