Уменьшить количество запросов Ajax - PullRequest
2 голосов
/ 18 февраля 2012

Я делаю скрипт чата с использованием 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.

Ответы [ 5 ]

11 голосов
/ 26 февраля 2012

Хорошо, 600 req / 5 min довольно ограничительно, если вы хотите сделать запрос / сек для каждого пользователя. По сути, это дает вам, что каждый пользователь будет делать 60 рэк / мин. Или 300/5 мин. Другими словами, даже если вы оптимизируете свой скрипт, чтобы объединить два запроса в один, максимум, вы можете иметь двух пользователей на вашем сайте ;) Не так много, я думаю ...

У вас есть два варианта:

  1. Придерживайтесь создания системы чата через запросы Ajax и смените хостинг-провайдера. Это может быть на самом деле дешевле, если у вас нет навыков, чтобы сделать 2.

  2. Забудьте о выполнении Ajax-запроса для опроса и, возможно, другого нажатия каждую секунду. Реализуйте что-нибудь вокруг веб-сокетов, длинных опросов или даже XMPP . Если вы пойдете по этому пути, я бы посмотрел на socket.io для прозрачной библиотеки, которая использует веб-сокеты, где они поддерживаются, и имеет запасные варианты для длинных опросов и других для остальных. Для XMPP-пути есть отличный Strophe.js . Обратите внимание, что оба маршрута намного сложнее, чем ваши запросы Ajax, и потребуют значительных изменений логики сервера.

2 голосов
/ 03 марта 2012

Я сейчас работаю над проектом, который требует синхронизации пользовательского интерфейса с событиями на сервере. Я использовал длинные опросы, которые действительно уменьшают количество вызовов ajax, но затем на сервер ложится бремя прослушивания события, в котором заинтересован клиент, что тоже не весело.

Я собираюсь переключиться на socket.io, который я настрою как отдельный push-сервис.

существующий сервер -> отправляет на сервер sockt.io -> отправляет подписчику

2 голосов
/ 02 марта 2012

Я не думаю, что проверка каждой секунды - это действительно хорошая идея, на мой взгляд, для онлайн-чата проверки на 2/3 секунды должно быть достаточно.

Чтобы получить меньше запросов, вы также можете добавить проверку активности пользователя на стороне клиента, если окна неактивны, вы можете увеличить время проверки, вернувшись к 2/3 секундам, когда пользователь снова станет активным, позволяют экономить ресурсы и запросы / минуты

2 голосов
/ 01 марта 2012

Я рекомендую вам вызывать этот платный сервис со стороны сервера, используя один поток (в качестве прокси API). Вы все еще можете опросить 600 запросов / 5 минут в этой теме. Затем каждый клиент делает Ajax-запросы на опрос или длительный опрос вашего прокси-сервера API без ограничений.

2 голосов
/ 27 февраля 2012

ggozad отвечает хорошо, я также рекомендую веб-сокеты. Они работают только с новыми моделями браузеров, поэтому если вы хотите сделать его доступным во всех браузерах, вам понадобится небольшой Flash-мост (Flash может очень легко взаимодействовать с сокетами, а также может вызывать функции JavaScript и вызываться из JavaScript). Кроме того, Flash предлагает P2P, если вы заинтересованы. http://labs.adobe.com/technologies/cirrus/

Кроме того, для серверной части вы можете заглянуть в Node.js , если вы являетесь поклонником JavaScript, как я:)

Чтобы завершить мой ответ: невозможно создать чат на основе Ajax, если вы ограничены 600 запросами / 5 минут (2 запроса в секунду), хотите сделать запрос в секунду и хотите иметь более двух пользователей.

Решение: переключиться на розетки или P2P.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...