Node.js/NGINX是否使用内部缓存来缓存经常使用的文件?

3
我想知道Node.js是否在以下情况下使用缓存,或者是否存在专门的模块:
例如,当您拥有一个Web门户网站,在起始页面上显示20个带图像的产品时,每次服务器都必须从硬盘或最好从SSD中获取图像。为了找到每个单独的图像,服务器需要约5-7毫秒。当有50个用户同时访问起始页面时,仅查找硬盘上的图像就需要5000毫秒。
因此,如果有一种方法可以将所有经常使用的文件(如图像、CSS、HTML等)保存在内存中,那将会很好。您只需定义缓存大小,例如50MB,模块/Node.js将保留经常使用的文件在缓存中。

4
您的节点服务器通常不会直接面向用户。常见的解决方案是使用nginx(或其他软件)作为node的代理,并作为静态资源的服务器。以下是一个示例:https://github.com/Canop/miaou/blob/master/installation.md#configure-a-reverse-proxy-with-nginx-optional - Denys Séguret
1
这并不取决于Node.js本身,而是取决于您用于提供HTTP内容的工具(例如像express这样的Web框架)以及该工具是否支持某种缓存。 Node.js本身并不是一个Web服务器。 - user659025
2个回答

1
Node.js本身(默认情况下)不执行任何缓存,尽管操作系统和其他底层元素(例如硬盘驱动器)可能会执行缓存,从而显着加快连续读取的速度。
如果您想在nodejs中启用缓存http响应,则可以使用http-cache库-https://www.npmjs.com/package/http-cacherequest-caching库-https://www.npmjs.com/package/node-request-caching。对于缓存文件,您可以使用filecachehttps://www.npmjs.com/package/filecache,对于提供静态文件,可以使用serve-statichttps://www.npmjs.com/package/serve-static)。
如果你正在使用像Express这样的框架,情况就不那么简单了 - 例如,在生产模式下运行Express会导致它缓存一些东西(如模板或CSS)。还要注意res.sendFile直接将文件流传输到客户端(可能是代理服务器,如nginx)。
然而,即使是Express的网页(http://expressjs.com/en/advanced/best-practice-performance.html)也建议使用单独的代理:

缓存请求结果

另一种提高生产性能的策略是缓存请求的结果,这样你的应用程序就不会重复执行相同的请求操作。

使用像Varnish或Nginx(请参见Nginx Caching)这样的缓存服务器可以大大提高应用程序的速度和性能。

如果您想了解有关加速nodejs的其他建议,可以查看https://engineering.gosquared.com/making-dashboard-fasterhttp://www.sitepoint.com/10-tips-make-node-js-web-app-faster/


0
Nodejs内置的Web服务器没有实现任何内容缓存。就像@prc322所说,具体答案取决于您在Nodejs上的技术栈(框架、中间件等)。另一方面,Nginx更广泛地用作静态资产的Web服务器。通常它们以某种方式组合,静态资产由Nginx提供,应用程序逻辑(rest服务等)由Nodejs应用程序处理。内容缓存是HTTP协议标准的一部分,您可以通过在Web应用程序前设置类似varnish的HTTP缓存来受益。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接