Tig*_*eow 5 php wordpress wordpress-plugin wordpress-json-api wp-api
我想更快地向WordPress API发出请求.我的API在插件中实现(使用register_rest_route来注册我的路由).但是,由于这是一个插件,所有内容都加载了它(子主题和主题),基本上对这个API的查询需要半秒钟,因为加载了所有这些无用的部分.
WordPress API不能以其他方式使用吗?由于大多数使用WP-API的插件不需要加载任何其他插件,更不用说主题......我不明白他们怎么会错过这个.
反正有没有这样做?
对的,这是可能的.在我的一个插件中,我需要最小的WordPress核心(没有插件和主题的数据库),这就是我所做的:
<?php
define('SHORTINIT', true); // load minimal WordPress
require_once PATH_TO_WORDPRESS . '/wp-load.php'; // WordPress loader
// use $wpdb here, no plugins or themes were loaded
Run Code Online (Sandbox Code Playgroud)
PATH_TO_WORDPRESS我组成的常数; 你只需要指出正确的路径.例如,在插件中,它可能看起来像:
require_once dirname(__FILE__) . '/../../../wp-load.php'; // backwards 'plugin-dir/plugins/wp-content'
Run Code Online (Sandbox Code Playgroud)
设置SHORTINIT到true肯定不会提升性能了一下.
使用WP_DEBUG禁用时,引导WordPress所需的时间如下:
如果这是针对您要求性能的站点,则可以通过启用OpCache(例如,最新版本中的APC或PHP OpCache)来增加这一点.
但我相信上面的两行代码定义SHORTINIT和要求wp-load.php是你正在寻找的.
为了澄清,这个文件是一个插件的一部分,但它独立于WordPress本身调用(通过Ajax和直接).它永远不会被插件或WP本身的任何其他部分包含或使用.
编辑: 由于OP实际上与WP-API有关,而不是一般的WordPress,我添加它来解决实际问题.我将保留原始答案内容,以防它可以帮助其他人.
我使用WP API进行了进一步的测试,就像@David在他的回答中所说,这个问题可能是其他问题.
除了其余的api,我加载了12个插件,一些相当"大"的插件,我的本地安装有大约25个主题安装(当然一个主动).我编辑了WordPress的index.php文件并用于microtime(true)记录所有内容的开始时间,然后编辑其中一个REST控制器来计算从开始到达API终点所需的时间.
我的系统上的结果始终为0.0462- 0.0513秒(没有PHP OpCache,没有其他系统负载).所以看起来引导所有的WordPress对性能影响不大.
如果请求需要半秒钟,那么瓶颈就在其他地方,切断插件和主题的影响微乎其微.至少这是我发现的.