中文文档: http://expressjs.com/zh-cn/advanced/best-practice-performance.html
使用中间件提供静态文件 在开发过程中,可以使用 res.sendFile() 提供静态文件。但是,请勿在生产环境中执行此函数,因为它必须针对每次文件请求读取文件系统,所以会产生严重的延迟,影响应用程序的总体性能。请注意,res.sendFile() 并非通过效率要高很多的 sendfile 系统调用来实现的。 因此,建议使用 serve-static 中间件(或者等效项),该中间件经过优化,用于为 Express 应用程序提供文件。 还有一个更好的选项,就是使用逆向代理提供静态文件;请参阅使用逆向代理以了解更多信息。
实际上两种方法内部实现是一致的。
serve-static/index.js
var stream = send(req, path, opts)
...
stream.pipe(res)
router/response.js
var file = send(req, pathname, opts);
...
sendfile(res, file, opts,callback)
// sendfile 函数内部
file.pipe(res);