Plugin options autoloading

时间:2013-02-21 作者:urok93

在《专业WordPress开发》一书中,我发现了以下技巧:

根据经验,如果博客的公共部分需要您的选项,请使用自动加载保存它们。如果只在管理区域需要它们,请保存它们而不自动加载

如果所有插件开发人员都遵循这个建议,那么这不会导致后端出现许多额外的SQL查询,从而降低管理方面的速度吗?

使用插件选项自动加载的好例子是什么?

2 个回复
最合适的回答,由SO网友:Dwayne Charrington 整理而成

就我个人而言,我在某种程度上不同意这本书的作者。如果您在Wordpress初始化时在数据库中自动加载多个选项,则会执行如下查找:““从wp\\U选项中选择option\\u name,option\\u value,其中autoload=\'是\'”*-开始。现在,想象一下,如果您有40个选项,那就是40个单独的DB查询。

但是,如果您只自动加载选项的序列化数组,那么在作为序列化字符串存储的选项选项中可能有数百个选项。因此,仅在一次自动加载多个选项的情况下自动加载并不是完全不好的。

我见过插件严重滥用options API,将多个选项单独存储,这是不必要的开销。所以请记住,除非有很好的理由,否则一定要连载。

自动加载的好处是可以缓存选项。因此,当Wordpress初始化时,选项会被缓存,因此效率更高。但正如我所说,如果您有80个单独的选项,那么在缓存它们之前,会有一个最初的性能损失,这很糟糕。

Here is an example of serialising multiple options into the one:

$myoptions = array(
    \'option1\' => \'option value\',
    \'option2\' => \'option value 2\',
    \'option3\' => \'option value 3\'
);

update_option(\'theme_settings_field\', $myoptions );

$options = get_option(\'theme_settings_field\');

if ($options) {
    $option1 = $options[\'option1\'];
}
正如您在示例中所看到的,您可以序列化一个数组,从数据库的角度来看,它是由许多选项组成的一个选项。当您检索这些选项时,它们将被取消序列化为您可以访问的数组(如上面的示例所示)。

SO网友:Mark Kaplun

默认情况下,选项是自动加载的,您需要做一些努力来防止这种情况发生。如果使用update_option API它被创建为自动加载。要拥有非自动加载选项,您必须通过调用add_option 第四个参数设置为“否”。由于API的易用性不同,我猜大多数选项都是自动加载的。

在走这条路线之前,你还应该考虑this ticket 其中声称wordpress。com只是自动加载所有选项。

结束