轮询适配器如何在Guard / listen中工作?

时间:2016-03-01 20:29:56

标签: guard

Guard/listen包含轮询适配器。 README.md says虽然它比其他适配器慢得多,但它适用于每个平台/系统和场景(包括网络文件系统,如VM共享文件夹)。但它是如何工作的?它是否扫描文件系统并存储mtime值并在它们发生变化时自我通知? (通过阅读source并不清楚。)

(如果你回答,在Guard wiki上发布信息也很棒。)

1 个答案:

答案 0 :(得分:1)

它以递归方式连续扫描所有给定目录。

:latency参数告诉它在扫描之间休眠多长时间。

代码非常复杂,因为轮询与OSX适配器共享很多。

以下是扫描目录的位置:https://github.com/guard/listen/blob/master/lib/listen/directory.rb

以下是存储模式和mtime的结构:https://github.com/guard/listen/blob/master/lib/listen/record.rb

以下是文件系统快照的部分无效的方式:https://github.com/guard/listen/blob/master/lib/listen/change.rb#L31

通常,如果要扫描的目录太多,轮询将会很慢。这就是为什么最好只观看选定的目录,避免使用不编辑/更改的文件的大型目录,例如: node_modulesvendor之类的内容。 Listen忽略了某些目录的规则。

调试模式(使用环境变量LISTEN_GEM_DEBUGGING=2设置)可以让您深入了解幕后发生的事情。

我实际上可以更详细地回答,除了我认为现有的架构很差。

所以我宁愿重写它以使其更清晰,更易于维护。

有关说明,请参阅此处:https://github.com/guard/listen/issues/381