# 插件多次加载导致的 WordPres 后台加载缓慢

- Link: https://www.ixiqin.com/2023/08/28/c-j-d-c-j-z-d-z-d-w-h-t-j-z-h-m/
- Published: 2023-08-28T06:00:55+08:00
- Author: 白宦成

在 [WordPress Jetpack 的一个陈年 Bug – 在 wp-Options 中生成大量的数据](https://www.ixiqin.com/2023/08/27/an-aging-bug-in-wordpress-jetpack-generating-a-large/)
中，我提到，问题的根源并不是数据库，虽然在数据库中产生了大量的数据，但并没有真正
意义上拖慢系统的进程， 那到底是什么拖慢了进程？

![](https://postimg.aliavv.com/m1/1fp2qm.png)

随着对系统的深入排查，我发现一个异常的事情，在进入管理后台时，出现了插件更新插件
列表的情况。这个并不多见。因为管理后台的进入不应该涉及到对于插件列表的更新。此外，
我发现这个查询的 SQL 巨长，且包含了大量的查询。

![](https://files.ixiqin.com/2023/08/23065308/d2b5ca33bd970f64a6301fa75ae2eb22-32-
740x1024.png)

于是评估，这个可能才是导致系统缓慢的真正原因。熟悉 WordPress 的读者一定知道， [WordPress 对于插件的加载，是通过在数据库中存储了一组插件路径，每次启动时通过这组插件路径来加载插件](https://developer.wordpress.org/plugins/plugin-basics/#how-wordpress-loads-plugins)。
这样对于 WordPress 来说，可以快速加载插件。

但在这次的异常场景中，同一个内容的插件被加载了多次，就算这个插件比较小，可能依然
会导致计算时间。此外，WordPress 引入插件后，会加载对应的 Hook 、 Filter 和 Action，
则可能导致同一个 Action 被频繁触发，造成额外的计算量。从而使得虽然数据库查询时间
不长，但整体耗时却巨长无比。

而这个问题的处理倒是也比较简单：

 1. 对 active_plugins 进行备份，避免修改跪了。
 2. 对于 active_plugins 进行清空，此时 WordPress 会彻底不加载任何插件。
 3. 仿照之前的列表，启用所有的插件。

通过对于active_plugins的清理，将启动速度成功降低至 2 秒左右，将系统性能提升了 80%。

![](https://files.ixiqin.com/2023/08/23065308/d2b5ca33bd970f64a6301fa75ae2eb22-36-
1024x247.png)
