实现插件选择性加载的策略

时间:2013-05-01 作者:He Shiming

我试图找出某种机制,根据页面url按需加载插件,以提高性能。

我主要关心的是我有一些管理ajax。当用户在页面上处于活动状态时重复出现的php调用。我尝试分析这些调用,发现为ajax调用加载的大多数插件都是不必要的。

虽然我可以用is_admin() 为了识别ajax调用,我希望WordPress和插件代码保持不变。加is_admin() 不区分ajax调用和管理面板。

我一直在研究插件加载过程。我只看到\'muplugins_loaded\', \'plugins_loaded\' 操作,无需在加载过程中使用筛选器。我检查过了wp_get_active_and_valid_plugins 改变插件加载的唯一方法似乎是update_option(\'active_plugins\') 显然,这不是一个可行的选择。其他东西都是硬编码的。

(我想提一下这个插件http://wordpress.org/extend/plugins/selective-loading/ 使用update_option 方法,我认为它只适用于非ajax环境,否则选项更改不会是原子的。)

我想知道是否还有一些方法可以实现选择性插件加载?

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

滤器option_active_plugins. 您可以更改的结果get_option() 这里没有实际更改数据库。

if ( defined( \'DOING_AJAX\' ) && DOING_AJAX )
    add_filter( \'option_active_plugins\', \'disable_plugins_temporary\' );

function disable_plugins_temporary( $plugins )
{
    // unset plugins you don\'t need, then

    return $plugins;
}
背景wp_get_active_and_valid_plugins() 呼叫get_option( \'active_plugins\', array() ) 获取活动插件。在里面get_option( $option, $default = false ) 我们发现此筛选器:

return apply_filters( \'option_\' . $option, maybe_unserialize( $value ) );
因此,我们的过滤器的最终名称是option_active_plugins.

SO网友:lflier

我不确定这是否能帮助您进行ajax调用,但是Plugin Organizer 是一个支持良好的插件,支持基于URL选择性加载其他插件。它在我的网站上运行得很好。

结束

相关推荐

Performance on WPMS

我的WPMS站点托管在8核/32mb RAM服务器上,但响应时间非常长。我们有大约1000个博客(单个db上有35000多个表)和70000个页面浏览量。我认为我可以缩短响应时间,将具有更多页面浏览量的博客移动到单独的DB中,并使用hyper DB插件将所有博客拆分为每个DB 100个博客。你觉得怎么样?