减少Ajax请求

Lui*_*uis 2 javascript ajax jquery resources server-side

我正在使用jQuery和JSON制作聊天脚本,但由于"资源使用限制",我的主机暂停了它.我想知道是否有可能(以及如何)减少这些请求.我读了一个问题,他们讲了一些关于Ajax超时的事情,但我不是很擅长Ajax.代码是:

function getOnJSON() {
    var from;
    var to;
    var msg_id;
    var msg_txt;
    var new_chat_string;

    //Getting the data from the JSON file
    $.getJSON("/ajax/end.emu.php", function(data) {
        $.each(data.notif, function(i, data) {
            from = data.from;
            to = data.to;
            msg_id = data.id;
            msg_txt = data.text;
            if ($("#chat_" + from + "").length === 0) {
                $("#boxes").append('...some stuf...');
                $('#' + from + '_form').submit(function(){
                    contactForm = $(this);
                    valor = $(this + 'input:text').val();
                    destinatary = $(this + 'input[type=hidden]').val();
                    reponse_id = destinatary + "_input";
                    if (!$(this + 'input:text').val()) {
                        return false;
                    }
                    else {
                        $.ajax({
                            url: "/ajax/end.emu.php?ajax=true",
                            type: contactForm.attr('method'),
                            data: contactForm.serialize(),
                            success: function(data){
                                responsed = $.trim(data);
                                if (responsed != "success") {
                                    alert("An error occured while posting your message");
                                }
                                else {
                                    $('#' + reponse_id).val("");
                                }
                            }
                        });
                        return false;
                    }
                });

                $('#' + from + '_txt').jScrollPane({
                    stickToBottom: true,
                    maintainPosition: true

                });
                $('body').append('<embed src="http://cdn.live-pin.com/assets/pling.mp3" autostart="true" hidden="true" loop="false">');
            }
            else {
                var pane2api = $('#' + from + '_txt').data('jsp');
                var originalContent = pane2api.getContentPane().html();
                pane2api.getContentPane().append('<li id="' + msg_id + '_txt_msg" class="chat_txt_msg">' + msg_txt + '</li>');
                pane2api.reinitialise();
                pane2api.scrollToBottom();
                $('embed').remove();
                $('body').append('<embed src="http://cdn.live-pin.com/assets/pling.mp3" autostart="true" hidden="true" loop="false">');
            }
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

限制是600 reqs/5 min,我需要几乎每秒钟.我有一年已经付款,他们没有退款,我也无法修改服务器,只是有权访问cPanel.

ggo*_*zad 11

好吧,如果你想为每个用户提出一个请求/秒,600 req/5 min是相当严格的限制.从本质上讲,这使您每个用户将达到60 req/min.或者300/5分钟.换句话说,即使您优化脚本以将两个请求合并为一个,最多可以在您的站点上有两个用户 ;)我猜不多...

您有两种选择:

  1. 坚持通过Ajax请求建立聊天系统并更改托管服务提供商.如果你没有这方面的技能,这可能实际上更便宜2.

  2. 忘记制作一个Ajax请求进行轮询,可能还有另一个要推送每秒.在Web套接字,长轮询甚至XMPP周围实现一些功能.如果你走这条路线,我会看一下socket.io,它是一个透明的库,它使用支持它们的网络套接字,并且有长时间轮询的后备,其余则用于其他部分.对于XMPP方式,有优秀的Strophe.js.请注意,这两个路由都比Ajax请求复杂得多,并且需要进行大量的服务器逻辑更改.