Performance: Checking file existence and stats
This concept affects the responsiveness and speed of file-related operations in a Node.js application, impacting how quickly the app can proceed after checking files.
Jump into concepts and practice - no test required
import { access, stat } from 'node:fs/promises'; async function checkFile() { try { await access('file.txt'); const stats = await stat('file.txt'); console.log(stats.size); } catch (err) { console.error(err); } } checkFile();
const fs = require('fs'); try { if (fs.existsSync('file.txt')) { const stats = fs.statSync('file.txt'); console.log(stats.size); } } catch (err) { console.error(err); }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Synchronous file check | N/A | N/A | N/A | [X] Bad |
| Asynchronous file check with promises | N/A | N/A | N/A | [OK] Good |
fs.access is designed to check file accessibility without opening or reading it.fs.readFile reads content, fs.open opens file descriptor, fs.writeFile writes data. These are not meant for existence check.fs.statSync is the synchronous method to get file stats.fs.stat is asynchronous, others are invalid method names.const fs = require('fs');
fs.stat('example.txt', (err, stats) => {
if (err) return console.error('Error');
console.log(stats.isFile(), stats.size);
});stats.isFile() returns true if it is a file, stats.size returns file size in bytes.const fs = require('fs');
try {
fs.access('data.txt');
console.log('File exists');
} catch (err) {
console.log('File does not exist');
}fs.access is asynchronous and requires a callback or promise to handle errors.fs.statSync inside try/catch handles missing path errors and checks if it's a directory.fs.accessSync without error handling; function isDirectory(path) {
try {
return fs.existsSync(path) && fs.statSync(path).isFile();
} catch {
return false;
}
} checks isFile() instead of isDirectory(); function isDirectory(path) {
if (fs.statSync(path).isDirectory()) return true;
else return false;
} lacks error handling for missing path.