为什么WordPress的AJAX调用速度较慢?

ozxc1zmp  于 2022-10-24  发布在  WordPress
关注(0)|答案(1)|浏览(276)

我正在我的本地主机(Xampp)上工作,我用AJAX在WordPress上做了一个API调用,这个API允许我搜索用户(/USERS?KEYOYS=)或直接用ID(/USERS/{id})获得一个用户。我创建了一个搜索栏,该搜索栏触发对‘admin-ajax.php’的AJAX调用,该调用链接到我在函数.php中获取API结果的函数。一切正常,但是AJAX调用太慢了。我将其与一个执行相同操作的非WordPress项目(简单的php和js脚本)进行比较:
|API调用时长|总时长(API+AJAX)
-|-|
使用WordPress AJAX|0.35s|3.2s
带WordPress REST API|0.35s|2.9s
不带WordPress|0.35s|0.9s
注意:我在搜索栏中输入相同的输入即可获得上述结果。
在WordPress上得到如此大的差异是正常的吗?我可能做错了什么,你能告诉我这可能是什么原因吗?如果我需要澄清什么或补充一些细节,请告诉我。
对@amarinediary的回应:
最初,我有一个名为“Match”的模板,其中包含搜索栏。当提交搜索栏表单时,JS函数解析表单数据并调用$.ajax函数。使用的url是“admin_url(admin-ajax.php)”,而“action”参数允许函数在unctions.php中验证nonce并调用API。=>结果是正确的,但速度慢。
现在,我尝试了rest API,当提交搜索栏表单时,$.ajax()url是“get_rest_url(NULL,‘ROUTE’)”。然后,它的工作方式与最初相同,只是不再通过“wp_ify-nonce”来验证现时值。=>结果很好,而且速度更快(见表)
所以,我有很多问题。首先,我是不是在尝试REST API时犯了错误?如果不是,那么随机数检查器是否仍然是REST API的强制项?如果是这样的话,为什么wp_verify_nonce不再与rest API一起工作?最后,哪一个更优化呢?
新问题:
我正在尝试开发的Web应用程序完全基于外部API。我需要发出动态GET请求(如搜索栏)并显示结果,我需要发送带有POST请求的表单,我的应用程序只是此API的一个接口。我不需要WordPress的文章,也不能通过管理界面创建显示API请求结果的页面。所以我必须创建许多模板来获得我想要的页面。
所以我来问这个问题:既然我不使用WordPress的主要功能,那么它与我的情况真的相关吗?你对此有何看法?
我感觉答案是否定的,我应该选择另一种解决方案,如ANGLING、REACTIVE、VUEJS或像Laravel或Symfony这样的框架。

km0tfn4u

km0tfn4u1#

随机数是一个“一次使用的数字”,用于帮助保护URL和表单免受某些类型的滥用,无论是恶意的还是其他的。
但即便如此,随机数也不是一种安全措施。它只是一个请求过滤器。在本地化数据时,随机数通过<script>标记通过简单的javascript注解传递给javascript。您实际上可以在源代码中看到这一点。

/* <![CDATA[ */
var data = {
    "_ajax_url":"https:\/\/...\/wp-admin\/admin-ajax.php",
    "_ajax_nonce":"5694443d46"
};
/* ]]> */

绝不应依赖随机数进行身份验证、授权或访问控制。使用CURRENT_USER_CAN()保护您的函数,并始终假设随机数可能被泄露。

默认情况下,REST API向所有人开放。
[.]您可以使用筛选器要求对API使用者进行身份验证,从而有效地阻止匿名外部访问。有关详细信息,请参阅下面的内容。
这意味着发布的数据最初都不是安全的(有趣的是,许多使用付费墙的WordPress站点都没有受限的REST API访问权限)。
WordPress是建立在彼此之上的技术之上的。AJAX调用排在第一位,API排在后面。两者都有不同的目标。
通常,响应时间不取决于所使用的后端,而更多地取决于请求是如何实现的。请求越具体、越受限,它就越“优化”。在你的案例中很难说出或举个例子,因为我不明白‘/USERS?KEYOYS=’应该返回什么。但是,如果您正在构建一个端点来检索特定数据,那么使用WP_Query可能会有一个更简单的答案。

相关问题