最快的方法来检查在NodeJs中的文件的存在

我build立一个超级简单的服务器在节点和我的onRequest监听器我试图确定,如果我应该提供一个静态文件(closures磁盘)或一些JSON(可能从mongo拉)基于request.url的path。

目前我试图首先统计文件(因为我在其他地方使用mtime),如果没有失败,那么我从磁盘读取内容。 像这样的东西:

 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 } }); 

除了为request.url.pathnamecachingfs.stat的结果fs.stat ,有没有什么可以加速这个检查? 例如,如果fs.readFile错误而不是stat ,它会一样快吗? 或者使用fs.createReadStream而不是fs.readFile ? 或者我可以检查使用child_process.spawn东西的文件? 基本上我只是想确保我不会花费任何额外的时间搞乱w / fileio当请求应发送给mongo的数据…

谢谢!

 var fs = require('fs'); fs.exists(file, function(exists) { if (exists) { // serve file } else { // mongodb } }); 

我不认为你应该为此担心,而是如何改进caching机制。 fs.stat对于文件检查确实没问题,在另一个subprocess中这样做可能会让你放慢速度,而不是在这里帮助你。

Connect在几个月前实现了staticCache()中间件,如以下博客所述: http : //tjholowaychuk.com/post/9682643240/connect-1-7-0-fast-static-file-memory-cache-and -更多

最近使用的(LRU)cachingalgorithm通过Cache对象实现,只需在Cache对象被击中时旋转即可。 这意味着越来越受欢迎的物体保持自己的位置,而其他人则被挤出堆栈并收集垃圾。

其他资源:
http://senchalabs.github.com/connect/middleware-staticCache.html
staticCache的源代码

这个片段可以帮助你

 fs = require('fs') ; var path = 'sth' ; fs.stat(path, function(err, stat) { if (err) { if ('ENOENT' == err.code) { //file did'nt exist so for example send 404 to client } else { //it is a server error so for example send 500 to client } } else { //every thing was ok so for example you can read it and send it to client } } );