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

标签 php arrays wordpress caching plugins

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

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

当我还是初学者的时候,我总是习惯这样保存它(get_option(prefix_option_name))。 然后我开始使用多维数组,为每个 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[部分][选项]'
  2. 将每个选项选项卡和选项页面拆分为它自己的选项条目,例如:section[option][etc]
  3. 只需在所有插件选项前加上前缀,然后将其作为单独的数据库条目,例如。 pluginname_option_1, pluginname_option_2

我喜欢“单一插件选项”方法,但现在我很困惑从数据库中获取/更新 1 个大数组是否真的是最好的方法,如果数组真的很大 - 比如在一个非常大和先进的插件中。

我认为 3 的问题在于,对于 1,您只需要在一个数据库调用中获取所有选项,而在 3 中(您将每个选项保存为自身的数据库条目),您将拥有为每个特定的和单独的选项查询数据库。

但是 1 个调用所有选项更好,每个部分调用 1 个或每个单独选项调用 1 个(我想我的问题最终可以缩小到这个 :D)。可序列化的“单一选项”插件选项多维数组实际上会变得太大吗?是否应该拆分?

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

最佳答案

我倾向于为不相关的数据选择单独的选项。在大多数情况下,这对性能无关紧要,但与组合它们相比有显着的好处。

性能

如果选项是autoloaded -- 默认情况下 -- 然后使用单独的选项不会导致任何额外的数据库查询。

如果您使用的是 Memcache,那么默认情况下对象限制为 1mb,如果您的选择超出这个范围,it will bypass caching and hit the database every time .

其他注意事项

我认为 Core 的设计假设选项将被分开,因此如果您将它们组合在一起,那么您必须做额外的工作才能利用 Core 以其他方式免费提供给您的一些有用的东西。

例如,所有这些常见做法都可以通过单独的选项轻松实现,但需要额外的逻辑来将组合选项减少到目标条目:

它也可以是一个“所有鸡蛋都放在一个篮子里”的问题;如果错误或其他一些因素导致意外的数据丢失,用户可能会丢失所有数据,而不仅仅是一个数据。这在实践中很少见,但我已经看到它发生了,具有非常破坏性的影响。人们应该有备份,但很多人没有,我也看到备份在实践中失败。

关于php - 所有 WordPress 选项作为单个选项(序列化多维数组)还是多个选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407309/

相关文章:

c - 如何创建一个函数来计算结构数组字符串项中的总字符数?

javascript - gmap3 : Uncaught TypeError: undefined is not a function

php - 如何更改 WooCommerce 缩略图裁剪位置?

php - 使用 PHP 和 codeigniter 显示带有 foreach 函数的固定表

php - Codeigniter动态数据库连接

javascript - 遍历已经存在的对象而不改变顺序

iOS核心数据: Fetch child Magical Record data

php - 检查产品是否可以在 WooCommerce 中下载

php - 获取关联 php 数组的第 n 个键

javascript - AJAX 发布表单不起作用。它绝对没有任何作用