javascript - 减少 Ajax 请求

标签 javascript jquery ajax 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">');
            }
        });
    });
}

限制为 600 个请求/5 分钟,我几乎每秒都需要完成它。我已经支付了一年的费用,他们没有退款,而且我无法修改服务器,只能访问 cPanel

最佳答案

好吧,如果您想为每个用户每秒发出一个请求,那么 600 个请求/5 分钟是相当有限的。从本质上讲,这意味着每个用户每分钟将发出 60 个请求。或 300/5 分钟。换句话说,即使您优化脚本以将两个请求合并为一个,您的站点最多可以有两个用户;)我猜不会太多...

您有两个选择:

  1. 坚持通过 Ajax 请求创建聊天系统并更改托管提供商。如果您不具备执行 2 的技能,这实际上可能会更便宜。

  2. 忘记每秒发出一个 Ajax 请求进行轮询并可能发送另一个请求来推送。围绕网络套接字、长轮询甚至 XMPP 实现一些东西。 如果你走那条路,我会看看 socket.io一个透明的库,它使用支持 Web 套接字的库,并且可以回退到长轮询和其他其他方式。对于XMPP方式,有优秀的Strophe.js 。请注意,这两个路由都比 Ajax 请求复杂得多,并且需要大量服务器逻辑更改。

关于javascript - 减少 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342031/

相关文章:

javascript - 无法通过 GWT 中的 JsInterop 将 Java 类导出到 JavaScript

javascript - 在 iCheck 复选框上检测 Shift 键 + 单击事件

javascript - 将值从隐藏字段传递到 Controller MVC 4

java - 单击按钮时,在 JSP 上显示 'Please wait' 警报。当 servlet 上的处理完成时,删除警报

ajax - 显示 localStorage 缓存中的数据,然后使用服务中的 AJAX 结果进行更新

jQuery 从服务器获取图像并显示为弹出窗口

javascript - x-editable textarea,html值在编辑时消失

javascript - 为什么我的 Angular 资源会忽略特定于操作的 url?

javascript - 为什么切换不能与其他 DIV 一起使用?

javascript - JQuery 导航集类