【发布时间】:2012-01-05 00:36:06
【问题描述】:
如何从 Node.js 中找出系统的 mtime 分辨率?
我为什么要问
在 Node.js 中,fs.watch 有时会发出重复的 change 事件。为了避免采取多余的操作,通常使用这样的代码(来自 CoffeeScript 的 coffee 实用程序):
if event is 'change'
fs.stat source, (err, stats) ->
throw err if err
return if stats.size is prevStats.size and
stats.mtime.getTime() is prevStats.mtime.getTime()
prevStats = stats
...
问题是:在 OS X 下,由于底层 HFS+ 文件系统,mtime 的分辨率只有 1 秒。也就是说,mtime.getTime() 值的格式为
1322068921000
因此,只要在 1 秒内发生两次更改,第二次更改就有可能不会影响文件的 mtime。感谢stats.size 检查,如果第二次更改对文件大小没有影响,这只是一个问题。不过,这还是个问题。
一个可靠的解决方案是按 mtime 间隔“去抖动”change 事件;即在 OS X 下,当 change 发生时,我将等待 1 秒对其采取行动(从而将可能具有相同 mtime 的所有更改事件组合在一起)。但我想在每个文件系统下将事件延迟尽可能短的时间,而不是采用最大公分母。
【问题讨论】:
标签: node.js filesystems filemtime