Ajax (Asynchronous JavaScript and XML) 是一种在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的技术。它有两种主要执行模式:
建议尽量避免使用同步请求。如果必须使用,同一时间不应超过1-2个同步请求。
浏览器对异步请求的并发限制通常为:
最佳实践:
原因:
解决方案:
// 实现简单的请求队列
class RequestQueue {
constructor(maxConcurrent = 4) {
this.maxConcurrent = maxConcurrent;
this.queue = [];
this.activeCount = 0;
}
add(requestFn) {
return new Promise((resolve, reject) => {
this.queue.push({ requestFn, resolve, reject });
this.next();
});
}
next() {
if (this.activeCount < this.maxConcurrent && this.queue.length) {
const { requestFn, resolve, reject } = this.queue.shift();
this.activeCount++;
requestFn()
.then(resolve)
.catch(reject)
.finally(() => {
this.activeCount--;
this.next();
});
}
}
}
// 使用示例
const queue = new RequestQueue(4);
function makeRequest(url) {
return () => fetch(url).then(res => res.json());
}
// 添加多个请求
queue.add(makeRequest('/api/data1')).then(data => console.log(data));
queue.add(makeRequest('/api/data2')).then(data => console.log(data));
// ...更多请求
原因:
解决方案:
原因:
解决方案:
// 使用AbortController取消之前的请求
let controller;
async function fetchData(query) {
// 取消之前的请求
if (controller) {
controller.abort();
}
controller = new AbortController();
try {
const response = await fetch(`/api/search?q=${query}`, {
signal: controller.signal
});
const data = await response.json();
// 处理数据
} catch (err) {
if (err.name !== 'AbortError') {
console.error('请求失败:', err);
}
}
}
在现代Web开发中,应优先使用异步Ajax请求,并合理控制并发数量。同步请求应尽量避免使用,仅在特殊情况下考虑。通过请求队列、节流、取消机制等技术可以更好地管理多个并发请求,提升应用性能和用户体验。
没有搜到相关的文章