我在 WordPress 中多次使用 ajax 请求。但最近我注意到它们需要很长时间才能完成。我测量了诸如 wp-ajax 和随后的 wp-load 之类的脚本的运行时间。我意识到查询执行时间的最大份额落在了他们身上(大约 80-85% 的时间)。由此,问题出现了,是否有可能在不使用标准 wp-ajax 的情况下以某种方式减少这个时间,绕过它,然后威胁什么?或者也许使用它,但也许以某种方式优化它的工作?
我在 WordPress 中多次使用 ajax 请求。但最近我注意到它们需要很长时间才能完成。我测量了诸如 wp-ajax 和随后的 wp-load 之类的脚本的运行时间。我意识到查询执行时间的最大份额落在了他们身上(大约 80-85% 的时间)。由此,问题出现了,是否有可能在不使用标准 wp-ajax 的情况下以某种方式减少这个时间,绕过它,然后威胁什么?或者也许使用它,但也许以某种方式优化它的工作?
有不同的可能性。
直接ajax请求
原则上,没有什么能阻止您向 php 处理程序发出直接的 ajax 请求。在这种情况下,没有 WordPress 函数可以工作,但是如果你对服务器有一个非常简单的请求(我什至很难想出一个有意义的例子),那么你可以使用这个选项。然而,在安全方面,会有一个漏洞,但更多的是在下面。
减少运行时间
当一个页面被正常访问时,WordPress会分三步进行初始化:
/wp-load.php- 加载 WordPress 库wp();- 设置主查询 WordPress/template-loader.php- 主题下载当发出 ajax 请求时,只有
/wp-load.php,即 这就是 WP 执行速记初始化的方式。没错,不要忘记在这种情况下所有插件都已连接。加载缓慢主要是由插件代码引起的。尝试在裸 WP 上做 ajax,你会看到不同。所以这里的方法是禁用(对于某些请求!)使用 mu-plugin 的一些插件。mu 插件在其他人之前加载,这是唯一一个可以即时禁用插件的地方。
安全
在 WordPress 中通过执行 ajax 请求的系统
admin-ajax.php是为了确保安全性而发明的。库初始化允许您使用与随机数检查相关的 WordPress 函数。使用一次的数字(Number used ONCE - nonce)是一种标签,可让您检查请求是否来自您的站点并远离 XSRF(跨站点请求伪造 - 跨站点请求伪造)。而且虽然这个数字实际上不止一次使用,但是这样的ajax检查是绝对必要的。因此,非常不鼓励直接请求。
TL;博士
优化网站上安装的插件数量,它们与 ajax 的工作——这是减少请求时间的真正方法。