我想更快地向 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
我编写的PATH_TO_WORDPRESS
常量;您只需要将其指向正确的路径即可。例如,在插件中,它可能看起来像:
require_once dirname(__FILE__) . '/../../../wp-load.php'; // backwards 'plugin-dir/plugins/wp-content'
将 SHORTINIT
设置为 true
确实有助于提高性能。
在禁用 WP_DEBUG
的情况下,引导 WordPress 所需的时间如下:
- 没有 SHORTINIT:~0.045 秒
- 使用 SHORTINIT:~0.0015 秒
如果这是针对您自己的网站并且您需要性能,您可能可以通过启用 OpCache(例如最新版本中的 APC 或 PHP OpCache)来稍微增加它。
但我相信上面定义 SHORTINIT
和要求 wp-load.php
的两行代码就是您要找的。p>
澄清一下,这个文件是插件的一部分,但它是独立于 WordPress 本身调用的(通过 Ajax 直接调用)。它永远不会被插件或 WP 本身的任何其他部分包含或使用。
编辑: 由于 OP 实际上关心的是 WP-API,而不是一般的 WordPress,我添加这个是为了解决实际问题。我会留下原来的答案内容,以防对其他人有帮助。
我用 WP API 做了进一步测试,就像@David 在他的回答中说的那样,问题可能出在其他地方。
除了其余的 api 外,我还加载了 12 个插件,一些相当“大”的插件,我的本地安装安装了大约 25 个主题(当然有一个是事件的)。我编辑了 WordPress 的 index.php
文件并使用 microtime(true)
记录一切开始的时间,然后编辑了其中一个 REST Controller 以计算从开始开始所用的时间到达 API 端点。
我系统上的结果始终在 0.0462
- 0.0513
秒左右(没有 PHP OpCache,也没有其他系统负载)。因此,引导所有 WordPress 似乎对性能几乎没有影响。
如果请求需要半秒,瓶颈在别处,削减插件和主题将产生最小的影响。至少这是我发现的。
关于php - 通过不加载主题和插件使 WordPress WP-API 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349568/