【发布时间】:2021-04-21 07:09:16
【问题描述】:
我有一些代码,我 recently moved to FastCGI for a backend 来满足来自基于 jQuery 的前端的 AJAX 请求。问题是,虽然 FastCGI 在很大程度上加速了它,但实际上我从两个 jQuery AJAX 请求连续太快地击中它得到了一个负面的性能问题。我想做的是“锁定”AJAX,以便请求以串行方式而不是并行方式发生——每个请求只需大约 180 毫秒即可执行,但如果第二个请求在第一个请求完成之前进入,则第二个请求最终需要大约一秒半的时间。
我想我可以使其串行化的明显方法是将$.ajax 请求放在上一个请求的.done 部分中,但是请求属于不同的功能,并且需要保持这种方式,因为它们没有并不总是需要一起被解雇——只是经常这样。想象一下:
function loadCategories () {
// Do some organizing stuff, set url, etc.
$.ajax({
url: url,
data: parameters,
type: "GET",
dataType : "json",
})
.done(function( json ) {
//process sidebar category data.
});
}
function loadArticles () {
// Do some organizing stuff, set url, etc.
$.ajax({
url: url,
data: parameters,
type: "GET",
dataType : "json",
})
.done(function( json ) {
//process article data.
});
}
这两个函数都在第三个函数中调用:
function loadPage (parameters) {
loadCategories(parameters);
loadArticles(parameters);
}
我想做的是在这两个函数中保留 .done 和 .always 逻辑,而且从这些函数返回一个承诺,以便我可以使用 $.then防止loadArticles 被触发,直到loadCategories 完成。我试图找出正确的方法来做到这一点,但还没有成功地做到这一点。
【问题讨论】:
-
如果您的 HTTP 服务器无法处理同时请求,则出现严重错误。如果一次有多个客户访问您的网站会怎样?
标签: javascript jquery ajax promise