Performance: Watching files for changes
Watching files for changes impacts CPU usage and memory consumption during development, affecting responsiveness and system load.
Jump into concepts and practice - no test required
const chokidar = require('chokidar'); const watcher = chokidar.watch('.', { ignored: /node_modules/, persistent: true }); watcher.on('change', path => { console.log(`File changed: ${path}`); });
const fs = require('fs'); fs.watch('.', { recursive: true }, (eventType, filename) => { console.log(`File changed: ${filename}`); });
| Pattern | CPU Usage | Memory Usage | Event Reliability | Verdict |
|---|---|---|---|---|
| fs.watch recursive on large dirs | High | Moderate | Unreliable under load | [X] Bad |
| Chokidar with ignored patterns | Low | Low | Reliable | [OK] Good |
fs.watch in Node.js?fs.watchfs.watch is designed to watch for changes in files or directories, triggering events when changes occur.fs.readFile, fs.writeFile, or fs.unlink.example.txt using fs.watch?fs.watch takes the filename and a callback with two parameters: eventType and filename.fs.watch('example.txt', (eventType, filename) => { console.log(eventType); }); correctly uses fs.watch with the right callback signature. The other options either use fs.watchFile or incorrect callback parameters.test.txt is modified?const fs = require('fs');
fs.watch('test.txt', (eventType, filename) => {
if (filename) {
console.log(`${filename} file changed with event: ${eventType}`);
} else {
console.log('filename not provided');
}
});test.txt changes, fs.watch triggers the callback with eventType usually as 'change' and filename as 'test.txt'.filename is provided, the code logs the filename and event type message.const fs = require('fs');
fs.watch('log.txt', (event, file) => {
console.log(file + ' changed');
});fs.watch's callback takes two arguments: the first is the event type (conventionally eventType), the second is the filename (conventionally filename). The code uses (event, file), which mismatches the standard names.(eventType, filename).logs and print the name of any new file created inside it. Which code snippet correctly achieves this?rename event indicates a file was added or removed.fs.watch('logs', (eventType, filename) => { if (eventType === 'rename' && filename) { console.log(`New file: ${filename}`); } }); checks for rename event and ensures filename is provided before logging the new file name, which is correct.fs.watch('logs', (eventType) => { if (eventType === 'change') { console.log('File changed'); } }); only checks for change event and does not handle new files specifically. fs.watchFile('logs', (curr, prev) => { console.log('Directory changed'); }); uses fs.watchFile which is for files, not directories. fs.watch('logs', () => { console.log('Something changed'); }); logs on any change but does not specify new files.