何时在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;
}
}
});
发布于 2013-08-22 17:49:17
它与性能无关...
当您需要在浏览器传递给其他代码之前完成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>
发布于 2021-01-13 19:12:24
在基本术语中,同步请求等待从请求接收响应,然后才允许继续进行任何代码处理。乍一看,这似乎是一件好事,但它绝对不是。
如前所述,当请求正在处理中时,浏览器将停止所有脚本的执行,并呈现UI,因为大多数浏览器的JS引擎(实际上)都是单线程的。这意味着对于您的用户来说,浏览器将显示为无响应,他们甚至可能看到操作系统级别的警告,表明程序没有响应,并询问他们是否应该结束其进程。正是由于这个原因,同步JS已被弃用,您可以在devtools控制台中看到有关其使用的警告。
到目前为止,异步请求的替代方案是更好的做法,应该始终在可能的情况下使用。这意味着您需要知道如何使用回调和/或promises,以便在异步请求完成时处理对它们的响应,以及如何构建JS以使用此模式。关于这一点,已经有很多可用的资源,this, for example,所以我在这里不再赘述。
很少有需要同步请求的情况。实际上,我能想到的唯一一种方法是在beforeunload
事件处理程序中发出请求时,即使这样也不能保证它能正常工作。
总而言之。您应该学习并在所有请求中使用异步模式。同步请求现在是一种反模式,它会导致比通常解决的问题更多的问题。
https://stackoverflow.com/questions/18366118
复制相似问题