node.js / ngnix使用常用缓存来处理常用文件吗?

时间:2016-04-07 15:19:57

标签: node.js caching

我想知道node.js是否在后续场景中使用缓存,或者是否存在模块:

当您有一个网络门户网站,它在首页显示20个带有图片的产品时,每次服务器必须从硬盘驱动器获取图像,或者最好从ssd获取图像。 对于每个单独的图像只是为了找到它服务器需要大约5-7毫秒。当你有50个用户同时访问起始页时需要20img * 5ms * 50 usr = 5000ms才能找到硬盘上的图像。

所以,如果有一种方法可以将所有常用的文件(如图像,css,html等)保存在内存中,那就太好了。所以你只需要定义缓存大小。例如50MB,module / node.js将常用文件保存在缓存中。

2 个答案:

答案 0 :(得分:1)

Node.js本身(默认情况下)不进行任何缓存,虽然OS和其他低层元素(例如HDD)可以这样做,显着加快了连续读取。

如果要在nodejs中启用缓存的http响应,则会有一个http-cache库 - https://www.npmjs.com/package/http-cacherequest-caching库 - https://www.npmjs.com/package/node-request-caching。对于缓存文件,您可以使用filecache https://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缓存)   大大提高了应用的速度和性能。

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

答案 1 :(得分:0)

Nodejs上的内置Web服务器不实现任何内容缓存。和@ prc322一样,具体的答案取决于Nodejs(框架,中间件等)上的技术堆栈。另一方面,Nginx被更广泛地用作静态资产的Web服务器。通常它们以某种方式组合,静态资产是来自Nginx的服务器,应用程序逻辑(休息服务等)由Nodejs应用程序处理。内容缓存是HTTP协议标准的一部分,您可以通过在Web应用程序前设置varninsh之类的HTTP缓存来从中受益。