ajax 多个setInterval进行ajax请求的页面长时间打开会出现页面卡死问题
多个setInterval进行ajax请求的页面长时间打开会出现页面卡死问题
浏览器的渲染(UI)线程和js线程是互斥的,在执行js耗时操作时,页面渲染会被阻塞掉。当我们执行异步ajax的时候没有问题,但当设置为同步请求时,其他的动作(ajax函数后面的代码,还有渲染线程)都会停止下来。即使DOM操作语句是在发起请求的前一句,这个同步请求也会“迅速”将UI线程阻塞,不给它执行的时间。这就是代码失效的原因。
方案一:
setInterval会消耗网页内存,如果不清理会一直消耗直到网页卡死。
解决办法:
先清除定时器再创建一个定时器
clearInterval(t);
t=setInterval(ajax,10000);
方案二:(等价于同步)
使用JQuery Deferred对象。
var getWordCount = function(。。。){
var defer = $.Deferred();
var urlStr = "postcommit.html?I_SOURCE=getxliff";
$.ajax({
url : urlStr, //async : false,表示异步执行。
success: function(dataStr){
defer.resolve(dataStr);
}
});
return defer.promise();
}
var myTotalprice = function(。。。){
//当getWordCount() 执行完成后,执行done()以下操作。就跟同步效果一样。
$.when(getWordCount(。。。)).done(function(dataStr){
alert(dataStr);
});
}
方案三:
参考地址:https://www.jianshu.com/p/55448bc08961
使用web worker:
var worker = new Worker('worker.js');//必须是同域的
worker.postMessage(msg);//主页面向worker发消息。msg可以是对象,字符串之类。
onmessage = function(evt) {// 处理主页面发来的消息
postMessage('reveive data ' + evt.data + 'from page');// 向主页面发消息
}
worker.terminate();
方案四:
长连接方式实现:xmlhttp池
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构