原来的问题:
我正在使用wordpress建立一个网站,有时使用异步调用WP REST API端点.
从我的AJAX函数调用这个端点通常至少从〜780ms的TTFB时间:
但是如果我直接在浏览器中打开URL /端点,那么TTFB的时间要快4-5倍,
我不知道延迟来自哪里.我使用Apache 2.4,启用了HTTP / 2和PHP 7,在本地的开发者服务器上运行此页面.
什么是监控这种表现的最佳方式“问题”?
请注意:我没有使用wordpress内置的AJAX功能.我只是打个电话
axios.get(`${url}/wp-json/wp/v2/flightplan`)
在我的主页模板中安装的React组件中.
更新
很有趣:清除饼干减少TTFB很多:
更新2
在删除其他两个AJAX呼叫之后,飞行计划请求的执行速度要快得多.我认为并发AJAX请求有一些问题.我已经阅读了一些关于会话锁定的内容,但是由于wordpress和所有安装的插件没有使用会话,所以不可能.
更新3
最重要的是,它与我的本地服务器设置有关.只需将站点部署到“真实”网络服务器:
但是,知道如何设置可以更好地并发处理的服务器仍然是有趣的.
更新4
我做了一个测试:在调用“真实”之前调用4个虚拟请求.脚本只返回一个“Foobar”字符串.这一切都看起来不错:
但是当将sleep(3)添加到虚拟AJAX脚本中时,所有其他请求也需要更长的时间:
为什么?
因此,优化对AJAX请求不必要的插件的负载.你必须忽略一些插件.您可以使用MU(must-use) codex来加载整个网站需要的插件.
MU插件与常规wordpress插件非常不同.它们安装在与常规插件分开的特殊/ wp-content / mu-plugins /文件夹中.只要它们位于该文件夹中,它们是活动的.要停用它们,您需要从该文件夹中删除它们.在加载常规插件之前,还会执行MU插件.
这就是为什么我们在这里使用一个MU插件.我们可以提前加载常规插件,并控制加载哪些插件.
function wpmdbc_exclude_plugins( $plugins ) { if ( !defined( 'DOING_AJAX' ) || !DOING_AJAX || !isset( $_POST['action'] ) || false === strpos( $_POST['action'],'wpmdb' ) ) return $plugins; $wpmdb_settings = get_option( 'wpmdb_settings' ); if ( !empty( $wpmdb_settings['blacklist_plugins'] ) ) { $blacklist_plugins = array_flip( $wpmdb_settings['blacklist_plugins'] ); } foreach( $plugins as $key => $plugin ) { if ( false !== strpos( $plugin,'wp-migrate-db-pro' ) || !isset( $blacklist_plugins[$plugin] ) ) continue; unset( $plugins[$key] ); } return $plugins; } add_filter( 'option_active_plugins','wpmdbc_exclude_plugins' );
你可以看到我们正在进入一个过滤器.所以当get_option(‘active_plugins’);被调用,该函数将被执行,并且可以修改哪些插件是活动的.
第一个条件语句确保我们正在处理WP Migrate DB Pro AJAX请求,如果不是我们保释,让wordpress像往常一样提供请求,加载所有活动插件.
函数的第二部分循环遍历活动插件列表,并检查几个条件.检查插件是否在我们的黑名单插件中排除.如果是,我们只需将其从活动插件列表中删除,防止在wordpress加载活动插件时加载它.