原代码是使用一个循环执行批量的$.get操作,如果使用单一循环过大,会瞬间对服务器做成大量请求。
for (i = 1; i < n; i++) {
$.get("http://xxx/" + i,
function(data) {
do other..
})
}
如果可以实现能否使用jQuery的Deferred Object进行代码的优化?把当完成一个get后再执行另外一个?令代码更有可读性?现在我用的办法是这样子:
var url = new Array();
for (i = 1; i < n; i++) {
url.push("http://xxx/" + i)
}
var doGet = function() {
if (url.length > 0) {
var tmpimg = url.shift();
$.get(tmpimg,
function(data) {
setTimeout(function() {
doGet()
},
500); //延时执行
})
} else {
//完成//
}
};
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我这里写了一个顺序循环调用异步函数数组的方法,希望对你有帮助。
要求: 你的函数必须返回jQuery Deferred 对象。
也可以访问我的Gist 查看。
但是不管怎么说,该发多少个请求还是得发多少个请求啊。要想降低发送的请求数量,必须把多个请求组合在一起发送。这需要后端提供一个新的支持批量请求的(比如说接收一个json的array,里面装有单个请求的数据)API。
然后在前端也可以写一个请求收集器,将一小段时间内发送的单个请求打包成一个批量请求发送给服务器,这样原先的代码就不需要改动了。
楼上正解,想减少服务器负荷,合并请求才是王道.