javascript - 能否使用Jquery优化大量Ajax循环操作?
PHP中文网
PHP中文网 2017-04-10 12:46:14
[JavaScript讨论组]

原代码是使用一个循环执行批量的$.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 {
            //完成//
        }
    };
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
高洛峰

我这里写了一个顺序循环调用异步函数数组的方法,希望对你有帮助。
要求: 你的函数必须返回jQuery Deferred 对象。

// test methods fun1 and fun2 for test
var fun1 = function () {
    var deferred = $.Deferred();

    setTimeout(function () {
        console.log('I am fun1');
    }, 1000);

    return deferred.resolve();
}

var fun2 = function () {
    var deferred = $.Deferred();

    setTimeout(function () {
        console.log('I am fun2');
    }, 1000);

    return deferred.resolve();
}

// make test jQuery asynchronous methods array
var arr = [fun1, fun2];

// This the target method for implementing that call jQuery asyn methods recursively
var recursive = function(i, arr) {
    return execute(arr[i]).then(function() {
        if (i + 1 < arr.length) {
            recursive(i + 1, arr);
        }
    });

    function execute(func) {
        return func();
    }
}

// run our test
recursive(0, arr);

也可以访问我的Gist 查看。

PHPz

但是不管怎么说,该发多少个请求还是得发多少个请求啊。要想降低发送的请求数量,必须把多个请求组合在一起发送。这需要后端提供一个新的支持批量请求的(比如说接收一个json的array,里面装有单个请求的数据)API。

然后在前端也可以写一个请求收集器,将一小段时间内发送的单个请求打包成一个批量请求发送给服务器,这样原先的代码就不需要改动了。

阿神

楼上正解,想减少服务器负荷,合并请求才是王道.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号