接下来,我们将深入探讨一些关于如何开始优化您的API性能的技巧。
当结果集很大时,分页是一种常见的优化方法。结果会流式传输回客户端,以提高服务的响应速度。
1*xVC03_0TfItugfF52vf3Og.png
同步日志记录会在每次调用时与磁盘交互,可能会减慢系统的运行速度。异步日志记录首先将日志发送到无锁缓冲区,然后立即返回。•日志将定期刷新到磁盘,这显著减少了I/O开销。
1*QqYsuTFsKtFAs_ArA0RFgg.png
我们可以将经常访问的数据缓存到缓存中。客户端可以首先查询缓存,而不是直接访问数据库。如果缓存未命中,客户端可以从数据库查询。
像redis这样的缓存将数据存储在内存中,因此数据访问速度比数据库要快得多。
1*YjiSvHppadQsjLEs0AdfwA.png
大多数API的负载不会很大,但也有一些例外。例如,一个分析公司可能需要返回一年的数据。这些大负载可能需要很长时间在服务器上生成,甚至更长时间在客户端上下载,因此它们通常最好以压缩格式传输。
您可以使用GraphQL来使客户端从服务器请求它们所需的数据。
请求和响应可以使用gzip等方式进行压缩,从而传输的数据大小要小得多。这加速了上传和下载。
1*XkypoXhzI3d1ElI5dZCAyw.png
当访问资源时,我们通常需要从数据库加载数据。打开和关闭数据库连接会增加显著的开销。
因此,我们应该通过打开连接池中的一组连接来连接到数据库。连接池负责管理连接的生命周期。
1*_2NqJpCHs-gFAh_zo7qH3g.png
对于并发处理大量请求,并发方法至关重要。开发人员可以使用多线程的思想和技术来创建可以同时处理多个请求的线程。
此外,可以更有效地使用线程池来分配线程,以避免资源浪费。
这种类型的查询执行通常称为“N+1查询”,因为您不是在单个查询中执行工作,而是运行一个查询以获取帖子列表,然后运行其他查询以获取每个帖子的评论。因此出现了“N+1查询”的术语。