所有WordPress选项作为单个选项(序列化多维数组),还是多个选项?

时间:2014-01-28 13:46:50

标签: php arrays wordpress caching plugins

我了解WordPress,但是现在我正在开发一个相当大的高级WordPress插件。

出于这个原因,我对我的数据结构进行了很多考虑。

当我是初学者时,我总是像这样保存它(get_option(prefix_option_name))。 然后我开始使用multidimentional数组,为每个settings_section注册1,现在我通常将所有插件选项保存在1个大的多维数组中,如下所示:plugin_options [section] [option] [evt.more subs here] [etc]

这确实很好用,我确实喜欢这样一个事实:我可以在init-hook中提取所有选项($ plugin_options = get_option('plugin_options),所以我可以使用$ options“本地”在插件中,但是......

考虑到WordPress已经在使用瞬态缓存(WP Cache API)get_option调用,哪个性能更好?即使我的插件有很多选项,我想你可以永远不会达到longtext类型的限制(4gb数据或其他东西),即使我将它全部打包在一个可序列化的多维数组中?但是我想从绩效的角度做最好的事情,所以简而言之,这是我的问题:

什么是最好的(对于一个相当大而复杂的wordpress插件)?

  1. 将所有插件选项保存为单个选项(序列化多维数组),例如。 name ='plugin_options [section] [option]'
  2. 将每个选项标签和选项页面拆分为自己的选项条目,例如:section [option] [etc]
  3. 只需添加所有插件选项的前缀,然后将其作为单独的数据库条目,例如。 pluginname_option_1,pluginname_option_2
  4. 我喜欢“单一插件选项”的方法,但是现在我很困惑是否从db中获取/更新1个大数组真的是最好的方法,如果数组真的很大 - 就像在一个非常大的高级插件中。

    我认为3的问题在于1,你只需要在一个db-call中获取所有选项,其中在3中(你将每个选项保存为自己的db条目),你会有查询每个特定和单个选项的数据库。

    但是对于所有选项来说哪个更好1,每个部分1个或每个选项1个(我想我的问题最终可以缩小到这个:D)。可序列化的“单选项”插件选项多维数组是否真的会变得过大?应该分开吗?

    期待听到您的意见。干杯。 : - )

3 个答案:

答案 0 :(得分:0)

就个人而言,我通常会选择单一选项。

如果您在单页加载中使用多个选项,那么每个选项都将是一个数据库调用(除非它们被自动加载)。如果您仍然在页面中使用了全部或大部分选项,那么如果您将所有选项全部放在一个选项中,那么您将为每个正在使用的选项保存数据库调用。这里的节省可以很快累积起来。

但是,这仍然取决于您在单个选项中放入多少数据。如果它非常大,那么反序列化或序列化数据可能会对您的服务器产生性能影响。 (见:serialize a large array in PHP?)。如果你处理大量数据,你将不得不做一些基准来衡量哪个更快。

答案 1 :(得分:0)

FWIW,每个页面加载时WordPress已经autoloads and caches all options(除非选项被保存为不这样做),所以它并不重要。

答案 2 :(得分:0)

这与性能并不严格相关,但是使用单个选项的一个缺点是,如果您向register_setting()注册,则会失去利用sanitize_callback参数的能力。

您仍然想注册一个,但是它必须是您自己的自定义函数,该函数循环遍历数组并手动调用诸如absint()sanitize_text_field()之类的东西。

如果您有自己的选择,只需将sanitize_callback注册为absint(或其他任何名称),就可以完成。