fs.watchFile 和 fs.watch 的区别
发布于 11 年前 作者 deemstone 19909 次浏览 最后一次编辑是 8 年前

他们俩个都是用来监视文件变动的(包括内容改动和名字、时间戳等的任何变化) 在官方文档两个方法都标注“Unstable”。

###watchFile()

相对稳定一些的是watchFile()这个方法,文档中介绍原理是轮询(每隔一個固定的时间去检查文件是否改动)。而且这个时间间隔是可以通过参数设置的。

###watch()

watch()这个方法是通过监听操作系统提供的各种“事件”(内核发布的消息)实现的。这个不同的平台实现的细节不一致,导致这个方法不能保证在所有平台上可用(而且经过实验发现在Mac上行为不正常,内容的改动只能触发一次回调,再改动watch()就没动静了)。

###建议

如果真正需要使用这个功能,优先试用watch(),如果在你的目标平台上无法正常使用,再考虑使用watchFile(),不过要小心千万不要用watchFile()监视太多文件,会导致内存暴涨。

另外,watch()在Mac上的问题,我找到了解决办法,稍后分享(在watch触发的回调中,隔1s重新调用FSWatcher的start方法)

如果不是及特殊需求,尽量使用现有的封装库,例如 gaze

回到顶部