是否从数据库中提取了所有选项变量,并在每次请求时将其加载到缓存中?

#1 楼

是的,有点。进行get_option调用后,WordPress将运行一个名为wp_load_alloptions的函数,该函数将获取所有自动加载选项的缓存副本,或将所有这些选项加载到缓存中。然后,wp_load_alloptions返回所有自动加载选项的数组。如果您的选项是自动加载的(使用add_option函数时指定),它将成为此数组的一部分并返回。

如果您的选项未自动加载,则WordPress会在缓存中专门查找该选项并返回值(如果存在)。如果未命中,最后的后备方法是进入数据库,获取值,将其设置为高速缓存,然后将其返回。

最后,如果根本找不到任何选项(例如,选项名称)是无效的),WordPress将该选项的名称存储在名为notoptions的缓存数组中。如果随后对non-options进行了调用,则WP首先检查notoptions数组,这样就不会浪费时间检查不存在的内容。

如果您担心调用get_option每页加载次数,不是。 WordPress将在第一个get_option调用之后缓存该选项值,而不管其是否自动加载。

查看get_option的源代码以了解发生了什么。

#2 楼

不,

仅将自动加载设置为true时专门加载的选项

请参见http://codex.wordpress.org/Function_Reference/add_option

因此,如果每个页面都需要此选项,则将其添加到数据库时,设置autoload = true。

之后,只需正常使用get_option-wp将处理缓存等。

评论


WP处理缓存而不管自动加载如何。

–chrisguitarguy
2011年9月5日下午4:57

#3 楼

是的,

无需将自动加载设置为yes / true。默认情况下将其设置为yes:
http://codex.wordpress.org/Function_Reference/add_option-
最后一个函数参数($ autoload):


此选项是否应该由wp_load_alloptions()函数自动加载(在每次加载页面时将选项放入对象缓存中)?有效值:是或否。
默认值:是


但是,如果将其设置为no,则该选项将不会放入缓存。