Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使异步ajax请求真正异步?_Javascript_Php_Jquery_Ajax_Asynchronous - Fatal编程技术网

Javascript 如何使异步ajax请求真正异步?

Javascript 如何使异步ajax请求真正异步?,javascript,php,jquery,ajax,asynchronous,Javascript,Php,Jquery,Ajax,Asynchronous,我在我的网站上添加了新功能。管理员正在上传带有一些图片的存档文件(出租收据),这些图片正在发送给用户。我的网站atm上有50-100个用户。最大用户数为700-1000 我正在使用phpmail()函数发送电子邮件。这需要时间。通过mail()发送一条信息需要约3.5秒。我需要至少发送100条信息 我有下一个代码结构: 主脚本: 输入类型为文件的图形表单 正在使用此文件上载存档 形式 检查存档的名称、存档的内容。所有文件必须是 某种形式的 向脚本发出ajax请求 发送租金收据.php。月份和年份

我在我的网站上添加了新功能。管理员正在上传带有一些图片的存档文件(出租收据),这些图片正在发送给用户。我的网站atm上有50-100个用户。最大用户数为700-1000

我正在使用php
mail()
函数发送电子邮件。这需要时间。通过
mail()
发送一条信息需要约3.5秒。我需要至少发送100条信息

我有下一个代码结构:

主脚本

  • 输入类型为文件的图形表单
  • 正在使用此文件上载存档 形式
  • 检查存档的名称、存档的内容。所有文件必须是 某种形式的
  • 向脚本发出ajax请求
    发送租金收据.php
    。月份和年份作为参数发送
  • 发送租金收据.php
    (获取月份和年份):

  • 将文件解压缩到目录
    ../$year/$month
  • 目录
    ../$year/$month
    do:
    • 获取文件名(名称类似于774.pdf,772.pff-文件名将此文件连接到用户
    • 获取用户的电子邮件
    • 发送带有附件的电子邮件(当前文件)
  • 此方法对10个文件的使用时间约为35秒,对1个文件的使用时间约为3.5秒

    我的宿主提供程序在
    php.ini
    中设置了
    max\u execution\u time 30
    ,因此该脚本失败(因为它的工作时间远远超过30秒)

    我尝试了另一种方法:

    主脚本

  • 输入类型为文件的图形表单
  • 使用此表单上载存档
  • 检查归档文件的名称、归档文件的内容。所有文件必须采用特定格式
  • 将存档解压缩到目录
    ../$year/$month
  • 目录
    ../$year/$month
    do中的每个文件
    • 获取文件名
    • 向脚本发出ajax请求
      发送租金收据.php
      (文件名、月份、年份正在发送)
  • send\u php\u script.php

  • 获取用户数据/电子邮件
  • 将文件
    ../$year/$month/$filename
    发送到此 邮寄
  • 我认为这种方法正是我所需要的。服务器将不会发出1个ajax请求,而是发出XX个ajax请求(取决于文件的数量)。每个请求将工作3.5秒。ajax请求是异步的(我认为,它们必须是),所以所有进程(XX个ajax请求)将工作3.5秒

    但是…我看到了什么?有3个图像,其中包含不同数量的文件(1、3、10个文件):

    发送1封电子邮件:

    发送3封电子邮件:

    发送10封电子邮件:

    为什么ajax请求(
    async:true
    作为默认值)作为非异步请求工作。此图显示,向脚本发送1封电子邮件的10个ajax请求与向脚本发送10封电子邮件的1个请求所用的时间相同

    为什么会这样?我认为它们必须是异步的,所有订阅都需要3.5秒

    如何减少脚本执行时间?如何让脚本运行得更快


    注意:文件不相等,因此我无法向10个收件人发送1封电子邮件。

    您可以异步发送请求,但在第一封邮件完成之前等待发送下一封邮件

    当您同时执行多个请求时,请求所需时间较长的原因是因为每个请求都访问磁盘,这是一个原子操作,因此一次只能有一个请求执行磁盘操作,因此如果您执行多个访问磁盘的请求,则不处理磁盘操作的请求离子现在,需要等待一个这样做


    您不应该使用sync ajax请求,因为它们会阻止请求进行时的javascript线程,因此如果您发送一个请求,等待回调并发送下一个,您将模拟sync请求,而不会阻止javascript线程,并且不会得到请求超时,因为accessi时只有一个请求关闭磁盘,这样就不会有任何请求等待另一个请求完成磁盘工作。

    仅仅因为浏览器异步发出请求并不意味着服务器将一次处理所有请求。您的屏幕截图显示请求是异步发送的,因此您需要澄清您的实际问题。因此,我的问题是e:是否可以运行XX个相同的脚本(一次处理所有请求)一分钟?或者如果服务器不能做到这一点,应该采取什么方法。事实上,看起来后端是瓶颈。Ajax请求应该很便宜。好的。也许我的问题不是很正确。Ajax请求确实是异步发送的,但如何让服务器一次处理所有这些请求。发送\出租\接收脚本是否使用会话\开始()?如果是,这将锁定脚本,直到释放会话。