我了解 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 插件)?
- 将所有插件选项保存为单个选项(序列化多维数组),例如。 name='plugin_options[部分][选项]'
- 将每个选项选项卡和选项页面拆分为它自己的选项条目,例如:section[option][etc]
- 只需在所有插件选项前加上前缀,然后将其作为单独的数据库条目,例如。 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 以其他方式免费提供给您的一些有用的东西。
例如,所有这些常见做法都可以通过单独的选项轻松实现,但需要额外的逻辑来将组合选项减少到目标条目:
-
pre_update_option{$option_name}
- 使用
register_setting
进行清理回调 - 从 REST API 检索设置
它也可以是一个“所有鸡蛋都放在一个篮子里”的问题;如果错误或其他一些因素导致意外的数据丢失,用户可能会丢失所有数据,而不仅仅是一个数据。这在实践中很少见,但我已经看到它发生了,具有非常破坏性的影响。人们应该有备份,但很多人没有,我也看到备份在实践中失败。
关于php - 所有 WordPress 选项作为单个选项(序列化多维数组)还是多个选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407309/