33

何时在 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;
                }

        }
    });
4

4 回答 4

49

跟性能没关系...

当您需要在浏览器传递给其他代码之前完成该 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>
于 2013-08-22T09:49:16.897 回答
2

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

jQuery.ajax() 方法的异步选项已弃用,现在怎么办?

于 2014-04-24T13:12:00.277 回答
2
  1. 当 async 设置为 false 时,将进行同步调用而不是异步调用。
  2. 当 jQuery AJAX 函数的 async 设置设置为 true 时,将进行 jQuery Asynchronous 调用。AJAX 本身意味着异步 JavaScript 和 XML,因此如果您通过将 async 设置为 false 使其同步,它将不再是 AJAX 调用。
  3. 有关更多信息,请参阅此链接
于 2017-08-12T05:32:25.927 回答
1

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

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

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

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

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

于 2021-01-13T11:12:24.013 回答