欢迎来到元素模板ys720.com,本站提供专业的织梦模板PBOOTCMS模板网站模板网站修改/网站仿站
当前位置:主页 > 程序教程 > 其他教程 >
其他教程

jQuery的Ajax同步页面假死/卡顿 解决办法

(元素模板) / 2023-04-17 10:44


起因: 需求是日历中选择不同日期,请求一次ajax,返回大量数据的时候会有页面卡顿的错觉,错觉来自页面效果一直不出现,直到数据即将完成渲染前出现一瞬间;

假死原因: 浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉。当我们执行异步ajax的时候没有问题,但当设置为同步请求时,其他的动作(ajax函数后面的代码,还有渲染线程)都会停止下来。即使我的DOM操作语句是在发起请求的前一句,这个同步请求也会“迅速”将UI线程阻塞,不给它执行的时间。这就是代码失效的原因;

解决办法: 使用1.5版以后的jQuery,1.5版以后的jQuery引入了Deferred对象,用Deferred对象替代async:false;

代码如下:
 

var defer = $.Deferred();
$.ajax({url : 'xxx',            //async : false,//原来设置的同步要注释掉success: function(backData){defer.resolve(backData)}
});        
return defer.promise();
Copyright @ 2013-2021 元素模板 www.ys720.com All Rights Reserved. 版权所有 元素模板 www.ys720.com