php - 通过不加载主题和插件使 WordPress WP-API 更快

标签 php wordpress wp-api wordpress-json-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

我编写的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 的两行代码就是您要找的。

澄清一下,这个文件是插件的一部分,但它是独立于 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/

相关文章:

javascript - WP API 获取帖子标签

php - 使用 WP REST API V2 (WordPress) 查询多个帖子类型

jquery - 类型错误 : 'undefined' is not a function (evaluating '$(document)' )

java - Android 截击 : Cannot pass data to server

PHP Echo 的 Javascript 使用

php - 从 PHP 脚本将用户添加到 Ubuntu 服务器

mysql - 从 wp_config 文件为 WordPress 设置外部数据库

javascript - 通过 ajax 刷新 WooCommerce 迷你购物车

node.js - 查询 WordPress WP-API 中的大量帖子(使用 Promise!)

php - 如果连续少于 3 个,则动态将 bootstrap 更改为中心