在查询REST API时仅获取特定字段是否对服务器性能有好处?

时间:2021-01-30 作者:AndreVitorio

我知道下载的数据较少会改善最终用户的体验,但我的问题与实际服务器性能有关,响应是否会更快?

我正在获取这样的帖子:https://example.com/wp-json/wp/v2/posts?_embed&per_page=20&categories=9

它为每个帖子返回一个相当大的对象,但我只需要id、标题、摘录、特色图片和永久链接。

将添加_fields[]=id&_fields[]=title, 等到上面的url提高服务器性能?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

我知道下载的数据较少会改善最终用户的体验,但我的问题与实际服务器性能有关,响应是否会更快?

将添加\\u字段[]=id(&_字段[]=标题等。。。到上面的url提高服务器性能?

No it would not, 还有几个原因。

当您请求一篇文章时,它会获取数据库中的整个post行,并且还会获取任何post meta和terms,以便一次性批量获取它们,而不是大量低效的较小查询。

因此,当您只要求这些字段的一个子集时,不会节省任何数据库时间或内存,只需添加少量处理即可将其过滤到所需的部分。

最重要的是,你要求定制一款专为你量身定制的女装。这意味着我们无法缓存结果并将其重复使用数百或数千次。因此,我们的可伸缩性可以显著降低,并且可能会有新的查询来获取我们筛选出的数据,因为现在客户端需要这些数据。

服务器端可以节省带宽,但服务器端将位于具有fat网络管道的数据中心,因此与CPU节省相比,这一优势微不足道。

可以采取措施缓解这种情况,例如确保客户端只能请求少量的唯一查询,以便缓存是可行的。

否则,存在一个非常现实的风险,即向客户端进行较小网络传输所节省的时间/速度与服务器生成响应所花费的额外时间相比相形见绌。较大的缓存响应可能需要更多的时间来传输,但传输可以立即开始,浏览器可以在下载时对其进行处理。

所以,进行现实生活中的测量和比较。

但是,如果我构建了自定义端点来进行优化的数据库调用呢

仍然没有,即使您硬编码响应以便不发生数据库查询,服务器仍然必须加载WordPress。它永远无法与专用缓存(如Varnish)或在WP完全加载之前加载并退出的缓存选项(如Batchache)竞争。

同样,您也会错过对象缓存的所有好处。当WP获取POST术语和元数据时,它们会被放入WP_Cache 这样就不会在同一个请求中多次获取它们。如果存在一个对象缓存,那么这个缓存会在主内存中的多个请求之间持续存在,速度会更快。具有此类缓存的站点可能不会进行数据库调用,因为数据已被提取。

相关推荐

如何在WordPress 4.7+中使用REST-API进行元查询?

我试图通过元查询进行过滤,但无论我尝试什么,我都无法使其工作。基本上,我希望通过rest API进行此查询:wp-json/wp/v2/books?meta_query[relation]=OR&meta_query[0][key]=arkivera&meta_query[0][value]=1&meta_query[0][compare]== 我尝试了几个不同的自定义字段,但它总是返回所有post对象。在我的函数文件中,我添加了:function api_allow_m