Как узнать, какое разрешение системы mtime у Node.js?
Почему я спрашиваю
В 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
эта проблема возникает только в том случае, если второе изменение не повлияло на размер файла.Тем не менее, это проблема.
Надежным решением было бы «отменить» события change
к интервалу mtime;то есть в OS X, когда возникает change
, я бы подождал 1 секунду, чтобы воздействовать на него (тем самым сгруппировав все события изменения, которые могут иметь один и тот же mtime
вместе).Но я бы хотел отложить событие на минимально возможное время для каждой файловой системы, вместо того, чтобы использовать наибольший общий знаменатель.