我有一个Express(Node.JS)+ MongoDB应用,服务器响应加载时间平均为4-7秒(缓慢)。
我了解根据google pagespeed tools,平均服务器响应时间不到200毫秒。
此应用正在异步地从mongoDB中获取数据,但是到数据库的往返时间非常慢,每次调用平均大约需要500ms-1s。这些调用是简单的findAll调用,用于检索少于<100条记录的数据。
我已经检查了数据库指标,它们看起来不错。也没有慢查询。这些是简单的findAll查询。蒙哥地图集的性能顾问认为没有异常。
生产应用程序和数据库都位于同一区域。
我已经尝试通过运行.lean()优化查询(猫鼬)的应用层
我还应该在哪里改善数据库延迟?一个简单的查询如何花这么长时间?否则,为什么预期的时间约为200毫秒,我的服务器响应时间最多需要4s?
答案 0 :(得分:2)
答案 1 :(得分:1)
使用相同的开发堆栈(mongodb,nodejs),我的nodejs代码曾经遇到过同样的问题,我陷入了api迟来响应的麻烦,并且花了很多时间之后才发现服务器是真正的罪魁祸首从heroku更改为amazon aws EC2实例,事情开始快速而且出奇地快,所以大概 您的网络服务器是罪魁祸首
要确保 mongodb 不是罪魁祸首,请编写一个api端点,您可以在其中返回一些json响应而无需对数据库进行任何查询。
答案 2 :(得分:0)
我用我的硕士学位开发的应用程序给您增加了一些像您一样的问题。我添加了一个在线运行的node.js api并将其呈现在教室中。我意识到每次我想在api中进行调用时,响应都会占用时间。我意识到问题之一是防火墙造成的学校网络。我放置服务器heroku.com的地方也给了一些延迟。我所做的是使用Redis(https://redis.io/)来提高性能,而且heroku也因为请求是http而不是https而给我带来了一些问题。
进行测试,以在本地主机上运行应用程序和数据,并查看性能。如果您没有任何问题,请尝试检查是否没有使您的请求混乱,例如托管节点服务器的位置。
让我知道这是否有帮助,或者您仍然遇到问题,以便我可以更好地帮助您。
答案 3 :(得分:-2)
您还可以尝试使用Azure服务。注册时,只需少量服务即可免费获得1年。 Azure使您可以在各个区域中部署多个实例,从而可以最大程度地减少延迟。如果预算合适,则可以使用针对Node.js + mongoDB应用程序进行了高度优化和自动管理的Web应用程序。