自动加载和选项表的性能


12

我在玩桌子的那autoloadoptions。我没有找到有关如何使用自动加载的值的太多信息。我尝试了一次print_r($GLOBALS),发现自动加载的选项存储在中$GLOBALS['wp_object_cache']->cache['options']['alloptions']

还有另一种访问这些变量的方法吗?

假设我需要访问一个option my_option,它在不同的模板中多次设置为自动加载(例如,一次in header.php,一次in footer.php),建议使用哪种方法?

  1. 我可以从$GLOBALS数组中检索它吗(因为该值已经在此处)
  2. 我必须使用get_option('my_option')一次并再次全球化变量
  3. get_option('my_option')每次使用(我看不出这样做的意义)
  4. 还有别的

Answers:


23

我没有找到有关如何使用自动加载的值的太多信息。

自动加载的选项没有特殊情况,它们的使用方式与常规选项相同,但是让我们弄清楚表的哪一autoloadoptions意味着什么。该列确定我们是否需要在请求的初始化阶段获取选项,还是仅应根据需要获取选项。

但是,当这种自动加载发生时,它有什么作用?所有自动加载选项均由wp_load_alloptions函数加载和缓存,该is_blog_installed函数在每个HTTP请求的开始由函数调用,由WP处理。

让我们总结一下:autoloaded选项是相同的选项,但是是在WP处理HTTP请求的开始时加载的。

假设我需要访问一个选项...建议使用哪种方法?

  1. $GLOBALS直接从中检索它是不好的方法,get_option而是使用
  2. 不欢迎全球化自定义变量,建议尽量减少
  3. 从我的角度来看,这是最适合您的选择
  4. 甚至不用考虑其他事情:)

为什么get_option每次使用功能都是最佳选择?因为:

  1. 第一个也是最重要的,因为:您可以确信每次调用它都会返回最新值。
  2. 它将缓存它以备将来重用。
  3. 它允许其他插件和主题通过挂钩option_optionname过滤器来挂钩您的选项。
  4. 如果尚未加载,它将获取一个选项。

1
+1非常丰富的答案。以前从未听说过选项挂钩:)
RRikesh 2013年

@rrikesh我们欢迎您,希望它能解释得足够好
Eugene Manuilov 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.