Chokidar (Node.js) 的效率如何?
Posted
技术标签:
【中文标题】Chokidar (Node.js) 的效率如何?【英文标题】:How efficient is Chokidar (Node.js)? 【发布时间】:2013-10-21 00:51:26 【问题描述】:我在服务器上有一个缓存引擎,它缓存根目录下访问的所有文件。我正在考虑使用 Chokidar 来观察整个目录树(递归)以进行文件更改并相应地更新缓存。但我担心如果子目录包含数十万个文件会发生什么 - Chokidar 的效率如何?
【问题讨论】:
你不能依靠操作系统的内置缓冲区缓存来处理经常访问的文件的缓存吗? 其实这让我忘记了...... 尽管如此,我仍然需要一个服务器缓存,因为相当多的文件在提供服务之前已经过预处理(例如,所有 .js 文件都会自动缩小),然后它们都是gzip压缩的。如果我依赖缓冲区缓存,那么我仍然会浪费大量的处理时间来进行缩小和 gzip 压缩,而不是直接从内存中提供 gzip 压缩的内容。 也许您的应用程序中的预处理步骤可以将结果存储在某种形式的缓存中?观看 100K 文件可能效果不佳。 【参考方案1】:Chokidar 的效率取决于它所运行的操作系统。
在 OS X 上,它使用一个模块来提供对本机 fsevents
API 的访问,这非常有效。
在其他系统上,它使用 node.js 的 fs.watch
或 fs.watchFile
API。在后台,fs.watch
使用各种系统 API 来通知更改,这可能相当有效。 fs.watchFile
使用 stat 轮询,这对于您描述的这么大的目录肯定是不合适的。
我的建议是你设置 chokidar 选项usePolling: false
并试一试,监控你的 CPU 负载。
更新(2015 年 7 月):自最初编写以来,Chokidar 已得到显着改进,并且轮询不再是任何平台上的默认设置。
【讨论】:
2017 年 10 月的情况如何? chokidar 在 Windows / Linux 上变得更快了吗?是否有任何有关 chokidar 性能的测试? chokidar 的嵌套目录有多深?我打算用它观看 10,000 个文件。但不确定它是否是好方法。 @SystemsRebooter 我正在使用它来监视 Windows 上的 50k+ 个文件,它工作正常。 100k 之后它使用了相当多的内存并且看不到添加以上是关于Chokidar (Node.js) 的效率如何?的主要内容,如果未能解决你的问题,请参考以下文章
错误:没有可用的 chokidar 版本。试过 chokidar@2 和 chokidar@3。将 npm 升级到 7.*.* 后