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

2024-04-19

我想更快地向 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

The PATH_TO_WORDPRESS我编造的常数;您只需将其指向正确的路径即可。例如,在插件中,它可能看起来像:

require_once dirname(__FILE__) . '/../../../wp-load.php'; // backwards 'plugin-dir/plugins/wp-content'

Setting SHORTINIT to true当然确实对性能有所帮助。

With WP_DEBUG禁用后,启动 WordPress 所需的时间如下:

  • 没有 SHORTINIT:~0.045 秒
  • 使用 SHORTINIT:~0.0015 秒

如果这是您自己需要性能的站点,您可以通过启用 OpCache(例如最近版本中的 APC 或 PHP OpCache)来稍微提高这一点。

但我相信上面的两行代码定义SHORTINIT并要求wp-load.php就是您正在寻找的。

澄清一下,这个文件是插件的一部分,但它的调用独立于 WordPress 本身(通过 Ajax 和直接)。它永远不会被插件或 WP 本身的任何其他部分包含或使用。

EDIT:由于 OP 实际上关注的是 WP-API,而不是一般的 WordPress,因此我添加此内容是为了解决实际问题。我会保留原来的答案内容,以防对其他人有帮助。

我使用 WP API 进行了进一步测试,就像 @David 在他的回答中所说,问题可能是其他问题。

除了其余 api 之外,我还加载了 12 个插件,一些相当“大”的插件,并且我的本地安装安装了大约 25 个主题(当然有一个是活动的)。我编辑了 WordPress'index.php文件并使用microtime(true)记录一切何时开始,然后编辑其中一个 REST 控制器来计算从开始到到达 API 端点所需的时间。

我的系统上的结果始终围绕0.0462 - 0.0513秒(没有 PHP OpCache,也没有其他系统负载)。因此,引导所有 WordPress 似乎对性能影响很小。

如果请求需要半秒,则瓶颈在其他地方,并且删除插件和主题的影响将很小。至少这是我发现的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过不加载主题和插件使 WordPress WP-API 更快 的相关文章

  • 使用php获取多个复选框名称/id

    如何使用 PHP 获取提交时多个选定复选框的名称或 ID 以下是示例表格 谢谢
  • 让网站登录也能在 WordPress 上使用

    我使用 PHP 和 MySQL 开发了一个网站 该网站已经有登录和注册表单 myweb com 我已经在这个网址添加了 wordpressmyweb com blog 我想禁用 WordPress 上的登录和注册页面并强制用户使用我的 基本
  • 总小时数无法从 Android 插入 MySQL

    我使用以下公式获得总小时数 public void updateTotalHours int a SplitTime objMyCustomBaseAdapter getFistTime int b SplitTime objMyCusto
  • PHP/MySQL/jQuery 记录的悲观锁定

    我一直在考虑为我参与的应用程序开发一些简单的记录锁定 有一些用户实际上需要花费几个小时才能完成记录的编辑 当其他人想要更改记录时 这会导致问题 目前不涉及锁定 我不确定乐观锁定在我的情况下是否可靠 因为记录是通过 AJAX 请求保存的 我正
  • PHP 矩阵的逆矩阵

    I saw 这个问题 https stackoverflow com questions 211160 python inverse of a matrix 并弹出这个想法 PHP 有没有一种有效的方法来做到这一点 EDIT 最好有演示 你
  • Laravel 4 - 工匠错误 SQLSTATE[42000]

    我正在尝试为我的用户表创建一个新的迁移 我有以下架构 Schema create users function t t gt increments id t gt string username 16 t gt string passwor
  • curopt_binarytranfer 到底是什么意思?

    我不明白有什么区别 CURLOPT RETURNTRANSFER AND CURLOPT BINARYTRANSFER 我写了一个脚本来检查它
  • 使用 php5-geoip 和 Maxmind 数据库获取 IPv6 支持

    我按照这些相同的步骤进行了 geoip 设置 http php net manual en geoip setup php http php net manual en geoip setup php wget http geolite m
  • 在 CodeIgniter 中使用 ajax 时出现 403 禁止错误

    我正在显示我的名字textbox使用 ajax 自动完成 但我的 ajax URL 不起作用 每次都显示在网络选项卡中 403 禁止 我尝试过像这样的ajax URL url baseUrl index php Employee contr
  • gd 的 php 包装类

    谁能推荐一个 gd 库的包装类 我找到了一个few http www bin co com php scripts classes gd image 但它们只具有基本的图像处理功能 例如翻转 倒转等 我真的在这里画画 所以我想要所有的线 点
  • 如何在 Mac 上更改 PHP-FPM 端口

    我没有使用 php 或 php fpm 但它占用了端口 9000 我需要端口 9000 我想更改端口 我把它改成了 etc php fpm conf and etc php fpm d www conf 听 127 0 0 1 9005 仍
  • 在 Windows 10 中安装 laravel 安装程序时出现错误

    我正在使用 Windows 10 并且composer已安装 当我尝试安装时laravel使用此命令全局安装程序 composer global require laravel installer Composer Downloader T
  • PHP PDO 与 mysql*() 的安全优势

    使用 PHP PDO 代替 mysql connect 等有任何安全优势吗 不会 与 MySQL 扩展相比 PDO 没有任何安全优势 墨菲定律告诉我们的除外 该定律对两者都适用 两者都会通过转义相同的字符来保证输入安全 然而 PDO 还有其
  • PHP 如何保持下拉列表中选定的选项在提交时保持选中状态?

    I have
  • 在 PHP 中查找数字的倍数

    我想在 PHP 中找到一个数字的所有倍数 我正在使用这样的东西 if count 20 计算出如果 count不等于20 但我还需要这个脚本来检查是否 count不等于 20 40 60 80 100 120 140 160 等 有任何想法
  • PHP md5() 给出与 MySQL md5 不同的输出

    我正在尝试设置登录系统 但无法解决一个问题 PHP 通过 md5 给了我另一个输出 比MySQL 例如 在 PHP 中 password md5 brickmasterj return password 返回 3aa7b18f304e2e2
  • 尝试使用 fopen() 将文件写入不同的目录

    我正在尝试将文件从一个目录写入另一个目录 例如 http www xxxxxxx com admin upload php http www xxxxxxx com admin upload php to http www xxxxxxx
  • 针对 Woocommerce 中多个产品类别计数的 ajax 添加到购物车的 JS 警报

    在 Woocommerce 中 当达到特定产品类别的购物车中的产品的特定数量时 我尝试显示 JavaScript 甜蜜警报 并在达到二级类别的产品的特定数量时显示另一个警报 商品通过 AJAX 添加到购物车 这就是我想使用 JavaScri
  • 发送 QUERY 数据包时出错。 PID=9565

    我有两个不同的环境开发和生活几乎都是相同的 但上述 标题中 警告仅在开发模式下发生 在此警告之前 我还收到错误消息 允许的内存大小 268435456 字节已耗尽 这仅发生在开发模式下 使用 PHP 版本 5 6 和 mysql 不是 my
  • 如何将上传的STEP文件转换为其他格式?

    如何将上传的 STEP 文件转换为其他 CAD 格式 最好使用 PHP 我将一个小型 STEP 文件上传到 3dContentCentral 并立即看到新上传的 STEP 文件的 20 种不同文件类型格式 示例网址 希望你们中的一些人能给我

随机推荐

  • 微服务之间的通信

    假设您有微服务 A B 和 C 它们当前都通过 HTTP 进行通信 假设服务 A 向服务 B 发送请求 服务 B 得到响应 然后 该响应中返回的数据必须发送到服务 C 进行一些处理 然后最终返回到服务 A 服务 A 现在可以在网页上显示结果
  • 注册用户时 django-registration 中出现 NotImplementedError

    我有一个 django 应用程序并尝试使用django registration应用程序在其中 下面是我的设置和代码 设置 py INSTALLED APPS django contrib auth django contrib conte
  • SQL Server 2008删除特殊模式下的所有表

    您好 我想知道是否可以使用一个 sql 查询或特殊脚本删除在自定义模式 例如 DBO1 下创建的数据库中的所有表 Thanks 这将为您生成所有 DROP TABLE 语句并打印 SQL 语句 然后 您可以在复制和执行之前验证它是否符合您的
  • 我们什么时候应该考虑使用私有的还是受保护的?

    只是想知道 我们什么时候应该真正必须使用private or protected对于模型中的某些方法 有时我不厌其烦地将我的方法分组private nor protected 我就让它保持原样 但我知道这一定是一个不好的做法 否则这两个分组
  • makefile patternrule 在目标文件名中带有更多通配符

    我需要创建一个特殊的 makefile 规则 最好通过一个示例来解释 也许我们用规则创建文件 test pdf tex pdflatex jobname test tex result pdf tex pdflatex jobname re
  • Visual Studio 2010 调试速度慢

    我在使用 Visual Studio 2010 时遇到问题 当我开始调试时 它运行缓慢 Internet Explorer 打开 但网站加载速度极其缓慢 我的同事和我在同一个项目上工作 他没有任何这样的问题 我的硬件是4G内存 Intel
  • Java Collections.sort(nodes) 使用什么排序?

    我认为是MergeSort 即O n log n 但是 以下输出不同意 1 0000000099000391 0000000099000427 1 0000000099000427 0000000099000346 5 0000000099
  • 将 functools.partial 与部分参数一起使用[重复]

    这个问题在这里已经有答案了 尝试部分操作时 我观察到以下行为 首先 我定义了一个函数foo它需要 2 个非关键字参数 gt gt gt def foo salutation name print salutation name 然后 我使用
  • DJango过滤器查询集

    我是 DJango 和 DRF 的新手 并被要求管理一些 DJango DRF 相关代码 经过大量搜索后 我仍然无法找到有关 filter queryset 如何工作以及如何与不同参数一起使用的完整示例 在某些地方我看到它的用法如下 sel
  • 投票数据库架构

    民意调查的最佳数据库架构是什么 一对多关系对此有好处吗 我正在考虑有两张桌子 poll questions int id varchar body datetime created at datetime updated at poll a
  • 使用 python 字符串格式插入制表符

    我正在尝试使用 format 形成一个字符串 但无法弄清楚这一点 lems scaena persona improbus for i in lems print format i t whatever 但拉环并没有像我想象的那样拉紧 实际
  • 如何解决“在 iOS 上使用 expo 播放视频但没有声音”的问题

    我使用世博会的视频组件 我可以播放视频 但在 iOS 中没有声音 在安卓上没问题 我该如何解决它
  • 在运行时停止/启动 WCF MEX 服务

    是否可以 如何在运行时停止和启动自托管 WCF 服务的 HTTP MEX 侦听器而不影响主 WCF 服务 请不要问我为什么要这样做 这是一种绕过别人人为限制的黑客行为 在重新测试和代码清理后重新添加了这个答案 这是我添加到我的基于 WCF
  • R:sample()命令受约束

    我试图从 0 到 7 随机抽取 7 个数字 有替换 但受到所选数字加起来为 7 的约束 例如 输出 0 1 1 2 3 0 0 没问题 但输出1 2 3 4 5 6 7 不是 有没有办法在添加约束的情况下使用示例命令 我打算使用以示例命令作
  • “在预期的位置未找到 FROM 关键字”

    SELECT distinct REPLACE CM NAME as CM NAME TO CHAR Booking Date MM DD YYYY AS Booking Date where Booking Date 03 20 2018
  • Logstash 解析时间戳半天上午/下午

    Logstash 新手 真的很喜欢它 尝试解析包含时间戳的 CSV 文件 想要解析时间戳并将其用作 timestamp字段 我的 CSV 输入示例 input stdin filter filter the input by csv i e
  • 使用 Microsoft.Web.Administration 远程管理 IIS 时身份验证期间出现 COMException

    设想 我需要远程管理与请求更改的服务器位于同一域的 IIS 服务器 创建和销毁应用程序 我有一个应用程序池设置为在授权帐户下运行 我已经使用 IIS 管理器和 Web 池成功运行的帐户测试了远程配置 因此我知道权限是正确的 我通过代码执行此
  • 为什么 Linq Cast<> 帮助器不能与隐式转换运算符一起使用?

    在决定重复投票之前 请阅读全文 我有一个实现的类型implicit cast运算符转换为另一种类型 class A private B b public static implicit operator B A a return a b c
  • 根据 pandas 中另一列的值创建新列

    我有这个 pandas 数据框 其 代码 列包含顺序分层代码 我的目标是使用每个层次级别代码及其名称创建新列 如下所示 原始数据 Code Name 0 A USA 1 AM Massachusetts 2 AMB Boston 3 AMS
  • 通过不加载主题和插件使 WordPress WP-API 更快

    我想更快地向 WordPress API 发出请求 我的API是在插件中实现的 使用register rest route来注册我的路线 然而 由于这是一个插件 所以所有内容都已加载 子主题和主题 并且基本上对该 API 的查询需要半秒 因