2013-10-13 40 views
6

我在服務器上有一個緩存引擎,它緩存在根目錄下訪問的所有文件。我正在考慮使用Chokidar來觀察整個目錄樹(遞歸)以進行文件更改並相應地更新緩存。但是我擔心如果子目錄包含數十萬個文件會發生什麼 - Chokidar的效率會如何?Chokidar(Node.js)的效率如何?

+0

難道你不能依靠你的操作系統的內置緩衝區緩存來處理經常訪問的文件的緩存嗎? – robertklep

+0

實際上,這讓我想起了......儘管如此,我仍然需要一個服務器緩存,因爲在提供服務之前,會對相當多的文件進行預處理(例如,所有的.js文件會自動縮小),然後它們都會被縮放。如果我依賴於緩衝區緩存,那麼我仍然會浪費大量的時間進行縮小和gzipping處理,而不是直接從內存中提供gzip內容。 – Jon

+0

也許您的應用中的預處理步驟可能會將結果存儲在某種形式的緩存中?觀看100K文件可能不會很好。 – robertklep

回答

9

Chokidar的效率取決於它在哪個操作系統上運行。

在OS X上,它使用一個模塊提供對原生fsevents API的訪問,這非常有效。

在其他系統上,它使用node.js的fs.watchfs.watchFile API。在引擎蓋下,fs.watch使用各種系統API來通知變化,這可能是相當有效的。 fs.watchFile使用stat輪詢,這對於您所描述的大小的目錄肯定是不合適的。

我的建議是,你設置chokidar選項usePolling: false並試一試,監控你的CPU負載。

更新(2015年7月):Chokidar自從最初編寫以來已經大幅改進,並且輪詢不再是任何平臺上的默認選項。

+1

2017年10月的情況如何?在Windows/Linux上,chokidar變得更快了嗎?是否有任何chokidar性能測試? chokidar的嵌套目錄有多深?我打算用它觀看10,000個文件。但不知道如果它的好辦法。 –

+3

@SystemsRebooter我用它來監視窗口上的50k +文件,它工作正常。 100k後,它使用了相當多的內存,並沒有看到添加 –