它是什么
- Angular前端应用程序通过服务器上的nginx或android上的cordova提供服务
- ASP.NET核心后端,通过Pomelo连接器连接到MySQL数据库。生产中的后端应用程序通过nginx反向代理提供服务
问题
从Angular应用程序发送到api的请求需要很长时间(一分钟或更长时间(,或者在生产上大约20-50个请求后完全超时(在我的本地IIS服务器开发环境中,这种情况可能一天发生几次,有时几天内根本不会发生(。
也许这能给某人一个线索。我认为问题出在EF查询上,因为我检索了一个实体及其子实体(图片、评论、点赞和其他与业务相关的实体(但当我关闭angular应用程序并再次打开时,请求在接下来的20-50个应用程序中再次有效
我还认为这可能是因为DbContext问题,一位开发人员告诉我了这个问题。
发生在哪里
在dev和prod环境中。然而,在生产中,它发生得更快。生产服务器有1GB的RAM和相对较慢的CPU(5美元的数字海洋液滴(。
我尝试了什么
- 根据此处描述的最佳实践重写EF查询
过滤掉后端后,我意识到瓶颈可能在Angular应用程序中的RxJs扩展中。我检查了一下,发现每次导航到新路线时都会创建可观察到的轮询通知。在20-50个导航事件之后,会有20-50个轮询请求阻塞所有内容。轮询机制重写修复了此问题。