2013-10-13 3 views
6

Ho un motore di memorizzazione nella cache sul server che memorizza nella cache tutti i file accessibili in una directory radice. Sto pensando di usare Chokidar per guardare l'intero albero delle directory (in modo ricorsivo) per le modifiche ai file e aggiornare di conseguenza la cache. Ma sono preoccupato di cosa succederebbe se una sottodirectory contenesse centinaia di migliaia di file - Quanto sarebbe efficiente Chokidar?Quanto è efficiente Chokidar (Node.js)?

+0

Non è possibile fare affidamento sulla cache del buffer integrata del sistema operativo per gestire la memorizzazione nella cache dei file a cui si accede frequentemente? – robertklep

+0

In realtà mi è sfuggito di mente ... Ciononostante, ho ancora bisogno di una cache del server perché alcuni file vengono sottoposti a pre-elaborazione prima di essere pubblicati (ad esempio tutti i file .js vengono automaticamente miniati) e quindi sono tutti gziped. Se mi affido alla cache del buffer, allora sprecherei ancora molte elaborazioni facendo il minification e il gzipping ogni volta invece di servire il contenuto gzip direttamente dalla memoria. – Jon

+0

Forse il passaggio di pre-elaborazione nella tua app potrebbe memorizzare il risultato in una qualche forma di cache? Guardare file da 100K probabilmente non funzionerà bene. – robertklep

risposta

9

L'efficienza di Chokidar dipende dal sistema operativo su cui è in esecuzione.

Su OS X, utilizza un modulo che fornisce l'accesso all'API nativa fsevents, che è estremamente efficiente.

Su altri sistemi, utilizza le API fs.watch o fs.watchFile di node.js. Sotto il cofano, fs.watch utilizza varie API di sistema per ricevere notifiche delle modifiche, che possono essere ragionevolmente efficienti. fs.watchFile utilizza il polling statico, che sarebbe sicuramente inappropriato per le directory grandi come quelle che stai descrivendo.

Il mio suggerimento è quello di impostare l'opzione chokidar usePolling: false e fare un tentativo, monitorando il carico della CPU.

Aggiornamento (luglio 2015): Chokidar è stato notevolmente migliorato da quando è stato scritto in origine, e il polling non è più l'impostazione predefinita su alcuna piattaforma.

+1

Come vanno le cose a ottobre 2017? Chokidar è diventato più veloce su Windows/Linux? Ci sono test con le prestazioni di Chokidar? Quanto sono profonde le directory annidate a chokidar? Sto pensando di guardare 10.000 file con esso. Ma non sono sicuro se la sua buona strada da percorrere. –

+3

@SystemsRebooter Lo sto usando per monitorare i file 50k + su Windows e funziona bene. Dopo 100k utilizza molta memoria e non riesce a vedere le aggiunte –