Guard/listen包括輪詢適配器。 README.md says,雖然比其他適配器慢很多,但它適用於每個平臺/系統和場景(包括網絡文件系統,如VM共享文件夾)。但它是如何工作的?它是否掃描文件系統並存儲mtime值並在它們更改時自行通知? (這不是從閱讀source清楚。)輪詢適配器如何在Guard/Listen中工作?
(如果您的回答,它會也很大張貼在Guard wiki的信息。)
Guard/listen包括輪詢適配器。 README.md says,雖然比其他適配器慢很多,但它適用於每個平臺/系統和場景(包括網絡文件系統,如VM共享文件夾)。但它是如何工作的?它是否掃描文件系統並存儲mtime值並在它們更改時自行通知? (這不是從閱讀source清楚。)輪詢適配器如何在Guard/Listen中工作?
(如果您的回答,它會也很大張貼在Guard wiki的信息。)
據汽車無掃描所有給定的目錄遞歸。
:latency
參數告訴它在掃描之間睡了多久。
代碼相當複雜,因爲輪詢與OSX適配器共享很多。
這裏就是目錄掃描:https://github.com/guard/listen/blob/master/lib/listen/directory.rb
這裏是哪裏的模式和修改時間被存儲結構:https://github.com/guard/listen/blob/master/lib/listen/record.rb
這裏是如何的文件系統快照的部分無效:https://github.com/guard/listen/blob/master/lib/listen/change.rb#L31
一般來說,如果有太多的大型目錄要掃描,輪詢只會很慢。這就是爲什麼最好只監視選定的目錄,並避免使用不需要編輯/修改的文件,例如大文件。例如node_modules
或vendor
。 Listen忽略了某些目錄的規則。
調試模式(與環境變量LISTEN_GEM_DEBUGGING=2
一起設置)可以讓您深入瞭解引擎蓋下發生了什麼。
我實際上可以更詳細地回答,但我認爲現有的架構很差。
所以我寧願重寫它,使其更清晰,更易於維護。
什麼你的意思做「其實我會回答,但我認爲現有的體系結構是窮人。」?看來你*做了*回答? –
我剛修好那句話。我的意思是有更多的血淋淋的細節可能是有用的,但我寧願工作在一個更好的架構上,而不是「抱怨」聽現在如何做。讓我知道你是否想知道其他事情;) –