Codeigniter:太多的ajax调用导致Web应用程序超时

时间:2015-11-19 17:53:50

标签: php jquery ajax codeigniter timeout

我有一个Web应用程序,其中有一个“投票”按钮。 “投票”按钮可以在用户能够在40秒间隔内点击多次。

对于每次单击,都会创建一个异步ajax请求,该请求将数据插入数据库。这适用于少数用户。当有超过300个用户单击投票按钮时,应用程序无法正确响应,从而导致超时错误。

请告诉我有关绕过此问题的建议。

请注意,CPU使用率几乎为50%。

1 个答案:

答案 0 :(得分:0)

试用此代码, 将其粘贴到您的脚本中,然后使用 ajax_call 而不是 $ .ajax

$(function(){
    window.queue = $.jqmq({
        delay   : -1,
        batch   : 2,
        callback:function(options){
            $.each(options,function(i,option){
                $.ajax({
                    url         : option.url,
                    type        : option.type,
                    data        : option.data,
                    dataType    : option.dataType,
                    beforeSend  : function(){
                        option.beforeSend();
                    },
                    success     : function(result){
                        option.success(result);
                    },
                    error       : function(xhr,status, error){
                        option.error(xhr,status, error);
                    },
                    complete    : function(){
                        queue.next(false);
                    }
                });
            });
        },
        complete:function() {
            console.log("done");
        }
    });
});
var ajax_call = function(data){
    var _defaults = {
        url         : "",
        data        : {},
        type        : "post",
        dataType    : "",
        beforeSend  : _default_beforeSend,
        success     : _default_success,
        error       : _default_error
    }

    var options = $.extend(_defaults,data);

    if(options.url != ''){
        queue.add(options);
    }
    else{
        alert("Url is not defined in ajax_call");
    }
}
var _default_success = function(){
    alert("Please define 'success' funciton in ajax_call for remove this alert!");
}
var _default_beforeSend = function(){
    alert("Please define 'beforeSend' funciton in ajax_call for remove this alert!");
}
var _default_error = function(){
    alert("Please define 'error' funciton in ajax_call for remove this alert!");
}