Как ограничить себя от беспрерывных ajax запросов?
Здравствуйте!
Представим - есть простой ajax запрос. Простого JS ограничения по таймеру тут мало, его можно выпилить, либо же просто заменить JS функцию с ajax на свою. Как в бэкенде реализовать задержку в виде, например, 5 секунд?
Например, пользователь нажал на кнопку. Сработал Ajax. И что нужно сделать, чтобы в бэкенде 5 секунд следующий "привет" от Ajax (от фронта) игнорировался?
slep(5);
, только в этом случае запрос всеравно будет исполнен по истечению 5 секунд
Ну или записывать в бд (или в куку, или в сессию) id юзера и дату обращения, затем при каждом запросе сверяться, вычисляя разницу во времени, если она меньше 5 секунд, то делать die
Антон: со sleep - да, 6 раз подряд каждые 5 секунд. Еще как вариант можно где-нибудь в отдельно подключенном файле через глобальные настройки Ajax установить задержку перед каждым запросом, но как многие пишут нельзя полностью полагаться на фронтэнд
Чем быстрее отработает скрипт на сервере и отдаст в клиент контент - тем лучше. Скрипт - который ничего не делает 3 секунды - тем не менее потребляет массу ресурсов, начиная от сетевого соединения и заканчивая памятью, выделенной интерпретатору... Ну и так далее...
Не вижу проблем. Перед показом проверяйте переменную с меткой времени. Если разница меньше 5 секунд return false, если больше - пишите метку в переменную и продолжайте скрипт.
В WEB'е клиенту никогда не было никакого доверия. Нет абсолютно никаких гарантий что там на том конце и по существу наверняка убедиться в этом тоже нет 100% способов. Поэтому однозначно на стороне сервера дожно решаться, и желательно не доходя ни то что до скрипта пхп, а лучше и до апача, т.е. на уровне nginx...
Можно попробовать дико извратиться и поставить заголовки кеширования на 5 минут PHP-скриптом. Я так не делаю, но почему бы нет?...
Т.е. браузер будет в течении 5 минут отдавать данные из своего кеша, и запрос до сервера не дойдет как не крутись... Если не кешировать, то сервер будет давать отлуп, но в целом нежелательная нагрузка будет иметь место, что не айс...