Sto costruendo un server super semplice nel nodo e nel mio ascoltatore onRequest sto provando a determinare se dovrei servire un file statico (fuori dal disco) o qualche json (probabilmente estratto da mongo) in base al percorso in request.url
.Il modo più veloce per verificare l'esistenza di un file in NodeJs
Attualmente sto provando a impostare prima il file (perché uso mtime altrove) e se ciò non fallisce, leggo il contenuto dal disco. Qualcosa di simile a questo:
fs.stat(request.url.pathname, function(err, stat) {
if (!err) {
fs.readFile(request.url.pathname, function(err, contents) {
//serve file
});
}else {
//either pull data from mongo or serve 404 error
}
});
Oltre cacheing il risultato della fs.stat
per la request.url.pathname
, c'è qualcosa che potrebbe accelerare questo check-up? Ad esempio, sarebbe altrettanto veloce vedere se si verificano errori fs.readFile
anziché stat
? O usando fs.createReadStream
invece di fs.readFile
? O potrei potenzialmente verificare il file usando qualcosa in child_process.spawn
? Fondamentalmente voglio solo assicurarmi di non passare troppo tempo a messare w/fileio quando la richiesta deve essere inviata a mongo per i dati ...
Grazie!
ho sempre usato 'stat' o' statSync' seconda mie esigenze (ad esempio ' statSync' in config), ma immagino che sarebbe tecnicamente più veloce fare 'readfile' e rilevare un errore (anche se l'errore di cattura è ___very__ pesante in JS, quindi potrei sbagliarmi). In generale, però, preferirei usare 'stat' semplicemente perché è più pulito che intenzionalmente lanciare un errore. Evita 'child_process' in generale dato che' node' sta facendo una push sui sistemi Windoze e qualsiasi codice che lo usa si romperà. –
@Lite Byte dovresti accettare seriamente la risposta data da DeadDEnD ... –