作为一名插件开发人员,我致力于编写占用尽可能少的服务器资源的插件。这就是为什么我想避免重复对在同一请求上运行的数据库的查询(非持久性)。
假设我的插件有一个函数/类,需要从选项表中检索设置(使用get_option
WP核心功能)。而且我知道,稍后将运行的另一个函数/类将需要相同的值(在相同的请求/页面加载中)。
我的问题是,什么更高效、更快:
A) 将值存储在PHP常量中B)将值存储在PHP全局变量中C)在调用函数之间传递值D)使用WP_Cache
(第一次检索时缓存它,然后在查询数据库之前检查缓存值是否存在)
E)什么都不做,停止思考。没有真正的改善。
好吧,如果不是一个值,而是多个值,就像一个数据数组,会怎么样?合适的答案还是一样的吗?如果我将设置存储在多个键中,并且我希望首先检索所有设置以存储它们,并且避免在代码运行时查询/执行get\\u选项函数,该怎么办?
最合适的回答,由SO网友:kero 整理而成
如果您检查source code for get_option
, 您将看到它已经使用wp_cache_get()
和wp_cache_add()
在引擎盖下。因此,在不深入研究实现的情况下,我假设get_option(\'foo\');
只会触发一个db调用(并缓存结果)。
因此,在这种情况下E)将适用:已经为这些调用实现了缓存。
然而,从更一般的角度来看
始终使用核心缓存机制(例如。WP_Object_Cache
而不是一些自定义实现)您可以将其存储在某个PHP常量/全局中,这是真的(它可能在常规环境中的行为)。但现在我,一个专业用户,来了,想连接memcached/Redis。现有的实现现在应该将对象缓存放在redis中,并为我处理所有事情。如果我实现了自己的缓存系统,我需要自己扩展它才能让它正常工作。
始终检查WP core的工作方式,并尝试以类似的方式工作。
根据我个人的经验,影响绩效的最大因素之一是WP_Query
. 因此,如果符合您的情况,请缓存这些结果,并尝试使查询更快。(查询更少的字段、不自动填充对象、关闭一些查询缓存/分页等)