【问题标题】:When to use async false and async true in ajax function in jquery何时在 jquery 的 ajax 函数中使用 async false 和 async true
【发布时间】:2013-08-21 19:34:16
【问题描述】:

在 ajax 调用中何时使用 async false 或 async true。就性能而言,它有什么不同吗?

例子:

$.ajax({
        url : endpoint,
        type : "post",
        async : false,
        success : function(data) {
                if (i==1){  
                getMetricData(data)}

                else if (i==2)
                {
                    capture = data;
                }

        }
    });

【问题讨论】:

  • 不是性能问题。
  • 基本上,当您需要以某种特定方式(例如异步或同步方式)执行代码或服务调用执行时,它会非常有用。根据您在此代码之后定义的代码,您定义了一些代码和 ajax 调用使异步选项为 true,然后它将像异步执行一样。

标签: ajax jquery


【解决方案1】:

这与性能无关...

当您需要在浏览器传递给其他代码之前完成该 ajax 请求时,您将 async 设置为 false:

<script>
    // ...
    $.ajax(... async: false ...); // Hey browser! first complete this request, 
                                  // then go for other codes

    $.ajax(...); // Executed after the completion of the previous async:false request.
</script>

【讨论】:

  • 我想更正一件事,即 ajax 中的异步总是会影响性能,因为它总是像线程一样等待一个请求完成。
【解决方案2】:
  1. 当 async 设置为 false 时,将进行同步调用而不是异步调用。
  2. 当 jQuery AJAX 函数的异步设置设置为 true 时,将进行 jQuery 异步调用。 AJAX 本身意味着异步 JavaScript 和 XML,因此如果您通过将 async 设置设置为 false 使其同步,它将不再是 AJAX 调用。
  3. for more information please refer this link

【讨论】:

    【解决方案3】:

    如果您可以并行执行几件事(没有相互依赖关系),则最好采用异步方式。 如果您需要它完成以继续加载下一个内容,您可以使用同步,但请注意此选项已弃用以避免滥用同步:

    jQuery.ajax() method's async option deprecated, what now?

    【讨论】:

      【解决方案4】:

      在基本术语中,同步请求在允许任何代码处理继续之前等待从请求接收到响应。起初,这似乎是一件好事,但绝对不是。

      如前所述,当请求在处理中时,浏览器将停止所有脚本的执行以及 UI 的呈现,因为大多数浏览器的 JS 引擎(实际上)是单线程的。这意味着对您的用户来说,浏览器将显示为无响应,他们甚至可能会看到程序没有响应的操作系统级警告,并询问他们是否应该结束其进程。正是由于这个原因,同步 JS 已被弃用,您会在 devtools 控制台中看到有关其使用的警告。

      到目前为止,异步请求的替代方案是更好的做法,应始终尽可能使用。这意味着您需要知道如何使用回调和/或承诺来处理异步请求完成时的响应,以及如何构建您的 JS 以使用此模式。已经有很多资源可用,this, for example,所以我不会在这里讨论。

      很少有需要同步请求的情况。事实上,我唯一能想到的就是在 beforeunload 事件处理程序中发出请求时,即使这样也不能保证它会正常工作。

      总结。您应该学习并在所有请求中使用异步模式。同步请求现在是一种反模式,它会导致比通常解决的问题更多的问题。

      【讨论】:

        猜你喜欢
        • 2014-01-29
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 2021-04-10
        • 2016-08-12
        • 2015-04-25
        相关资源
        最近更新 更多