readFile 是不是缓存内容?

Posted

技术标签:

【中文标题】readFile 是不是缓存内容?【英文标题】:Does readFile caches the content?readFile 是否缓存内容? 【发布时间】:2016-07-14 23:00:45 【问题描述】:

说我有:

var fs = require('fs');
var a= fs.readFile(__dirname + '/someBigFile.txt', function(err, data) 
    console.log(data);
);

我注意到,如果首先读取 someBigFile 需要 2 秒,现在则需要几毫秒。当您多次阅读 Node.js 时,是否会发生一些内部缓存?例如:

for(var i =0; i < 10000; i++)

    var greet = fs.readFile(__dirname + '/greet.txt', "utf-8", function(err, data) 
    );

【问题讨论】:

我的回答对你有用吗? 【参考方案1】:

所以我遇到了这个问题,但在不同的上下文中,我编写了一个节点 js 服务器,它读取网络驱动器上的文本文件,这对我来说本质上是只读的,但是,另一个应用程序偶尔会写入该文件并我想立即看到这些变化。尽管我可以看到文件已更改,但我的 Node js 应用程序一直在读取文件的陈旧版本。

我在阅读帮助后解决了它并添加了一个绕过系统本地文件缓存的“rs”https://nodejs.org/api/fs.html#fs_file_system_flags

   fs.readFile( path,  "flag": 'rs' , (err, data) =>  ) 

【讨论】:

在文档中他们只提到了“r”、“r+”、“rs+”。那么你在哪里找到这个“rs”选项?【参考方案2】:

没有。它可能是您的存储系统缓存(在某些情况下,它可能是操作系统或一些额外的软件缓存)。尝试将一些数据写入文件并尝试再次读取。

【讨论】:

【参考方案3】:

简单的答案是 - 这不是像 node.js 中那样的内部缓存。

但是如果您多次读取相同的文件和目录,您可以将 fs 模块包装在 cached read-only version 中以加速事情,而事情并没有'不要在光盘上更改。

【讨论】:

【参考方案4】:

fs 模块不会缓存它读取的内容。

但是,如果您需要缓存版本并且(幸运地)尝试读取 JSON 文件缓存,您可以使用 require。它会读取和缓存。

【讨论】:

以上是关于readFile 是不是缓存内容?的主要内容,如果未能解决你的问题,请参考以下文章

readfile & file_get_contents异同

console.log 不是 nodejs fs.readfile 中的函数

使用 require vs fs.readFile 读取 json 文件内容

怎样使用ReadFile读取文本文件?

Webpack nodejs fs.readFile 不是函数

串口:ReadFile 和 CloseHandle [重复]