经过一番调查,我更新了问题的标题.请看下面我的更新.

原来的问题:

我正在使用wordpress建立一个网站,有时使用异步调用WP REST API端点.

从我的AJAX函数调用这个端点通常至少从〜780ms的TTFB时间:

但是如果我直接在浏览器中打开URL /端点,那么TTFB的时间要快4-5倍,

我不知道延迟来自哪里.我使用Apache 2.4,启用了HTTP / 2和PHP 7,在本地的开发者服务器上运行此页面.

什么是监控这种表现的最佳方式“问题”?

请注意:我没有使用wordpress内置的AJAX功能.我只是打个电话

axios.get(`${url}/wp-json/wp/v2/flightplan`)

在我的主页模板中安装的React组件中.

更新

很有趣:清除饼干减少TTFB很多:

更新2

在删除其他两个AJAX呼叫之后,飞行计划请求的执行速度要快得多.我认为并发AJAX请求有一些问题.我已经阅读了一些关于会话锁定的内容,但是由于wordpress和所有安装的插件没有使用会话,所以不可能.

更新3

最重要的是,它与我的本地服务器设置有关.只需将站点部署到“真实”网络服务器:

但是,知道如何设置可以更好地并发处理的服务器仍然是有趣的.

更新4

我做了一个测试:在调用“真实”之前调用4个虚拟请求.脚本只返回一个“Foobar”字符串.这一切都看起来不错:

但是当将sleep(3)添加到虚拟AJAX脚本中时,所有其他请求也需要更长的时间:

为什么?

每次由wordpress提供AJAX请求时,都会加载所有wordpress核心,活动主题和所有活动插件.我们可以通过使用必须使用的插件来排除特定的插件来加载特定的请求来减少这个开销.

因此,优化对AJAX请求不必要的插件的负载.你必须忽略一些插件.您可以使用MU(must-use) codex来加载整个网站需要的插件.

MU插件与常规wordpress插件非常不同.它们安装在与常规插件分开的特殊/ wp-content / mu-plugins /文件夹中.只要它们位于该文件夹中,它们是活动的.要停用它们,您需要从该文件夹中删除它们.在加载常规插件之前,还会执行MU插件.

这就是为什么我们在这里使用一个MU插件.我们可以提前加载常规插件,并控制加载哪些插件.

在这种情况下,我们的MU插件由单一功能组成:

function wpmdbc_exclude_plugins( $plugins ) {
    if ( !defined( 'DOING_AJAX' ) || !DOING_AJAX || !isset( $_POST['action'] ) || false === strpos( $_POST['action'],'wpmdb' ) ) return $plugins;
    $wpmdb_settings = get_option( 'wpmdb_settings' );
    if ( !empty( $wpmdb_settings['blacklist_plugins'] ) ) {
        $blacklist_plugins = array_flip( $wpmdb_settings['blacklist_plugins'] );
    }
    foreach( $plugins as $key => $plugin ) {
        if ( false !== strpos( $plugin,'wp-migrate-db-pro' ) || !isset( $blacklist_plugins[$plugin] ) ) continue;
        unset( $plugins[$key] );
    }
    return $plugins;
}
add_filter( 'option_active_plugins','wpmdbc_exclude_plugins' );

你可以看到我们正在进入一个过滤器.所以当get_option(‘active_plugins’);被调用,该函数将被执行,并且可以修改哪些插件是活动的.

第一个条件语句确保我们正在处理WP Migrate DB Pro AJAX请求,如果不是我们保释,让wordpress像往常一样提供请求,加载所有活动插件.

函数的第二部分循环遍历活动插件列表,并检查几个条件.检查插件是否在我们的黑名单插件中排除.如果是,我们只需将其从活动插件列表中删除,防止在wordpress加载活动插件时加载它.

为什么我的并发AJAX请求到PHP脚本/ WP REST API这么慢?的更多相关文章

  1. wordpress添加Html5的表单验证required方法小结

    这篇文章主要介绍了wordpress添加Html5的表单验证required方法小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 保护MY REST API仅用于MY IOS APP

    我在Laravel中设计一个RESTAPI,用于我的ios应用程序.目前我被困在以下几点:如何保护我的RESTAPI只允许访问我的ios应用程序?听起来我需要通过向我的IOSAPP授予一个私钥来将类似于HMAC方法的内容合并到我的IOSAPP代码中.当从iosapp中运行请求时,我传递带有私钥和其他数据的哈希,然后当在服务器上收到请求时,我通过重新计算哈希来检测请求是否来自应用程序内的用户.我不知道这是否安全&我会认为不是吗?

  3. iOS设备上的Safari正在加载损坏的图像 – WordPress网站

    有问题的图像是JPEG,我把它们缩小到更小的尺寸.有问题的WordPress网站是响应式的,当我使用移动网络加载网站时就会发生这个问题.无线方面,它没有问题,但在3G/4G上,随机加载的图像,一些被破坏,图像交换位置,所以所有的css和js似乎搞砸了.我正在使用W3缓存来提高速度,但没有任何帮助.有些图像是半灰色,黑色,有时看起来有点破损.这只发生在带有safari浏览器的iOS设备上.其他人面临同样的问题?

  4. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  5. REST API iOS开发

    我将RestKitAPI设置到我的应用程序有很多麻烦.我想知道有没有其他好的API来制作RESTful应用程序?

  6. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  7. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  8. 泛型 – Swift相当于MIN和MAX宏

    在C/Objective-C中,可以使用MIN和MAX宏找到两个数字之间的最小值和最大值。Swift不支持宏,似乎在语言/基础库中没有等价物。应该有一个定制的解决方案,也许基于类似这样的one?min和max已经在Swift中定义:看到这个伟大的写在documented&undocumentedbuilt-infunctionsinSwift。

  9. 在Swift中调用REST API

    我试图使用Swift对RESTAPI进行GET调用,并试图遵循许多教程,但不能弄清楚。或者是因为我不知道如何将所有的Obj-C翻译成Swift,或者因为一半的方法n’都被弃用。有谁知道如何进行调用,并解析返回的JSON数据?

  10. 尝试使用swift mailer,gmail smtp,php发送邮件

    这里是我的代码:在运行时出现此错误…

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到<input>中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部