Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какой вариант реализации кода лучше?

Quatrix Мыслитель (5427), закрыт 3 года назад
Смысл такой, что каждый запрос на event.php будет выдавать результат выполнения некого кода и заносить его в textarea, и так много раз, потом правда сделаю проверку data и в случае false буду останавливать, но сейчас такой вопрос:
-
в первом варианте получается рекурсия, и она будет жрать память?
во втором вроде как все норм, функция func завершается и setTimeout через 10 мсек запускает её еще раз, уже вроде как и не рекурсия?
Лучший ответ
Ярослав Искусственный Интеллект (107821) 3 года назад
Да, в первом случае рекурсия, а во втором - нет (и стек вызовов не переполнится).
То есть, лучше второй вариант.

Только два нюанса:
• код с jQuery, где подобное дрочилово DOM, в любом случае неэффективен, и жрать он будет (хоть и не столь безумно как с рекурсией). Мобилки греются и плачут
• 10мс браузер не даст, по факту интервал будет больше.
ЯрославИскусственный Интеллект (107821) 3 года назад
Есть еще третий нюанс, это бан от хостера за спам запросами - но если серверный скрипт крутится на локалхосте (или на дедике за многоденег), то все ок.
ЯрославИскусственный Интеллект (107821) 3 года назад
И четвертый нюанс, это подобие рейс-кондишн с этими запросами: отправленные позже, могут получать ответ быстрее чем отправленные ранее - и все пишется в один элемент без какого-либо контроля очередности. Но если порядок вывода не важен, то опять, все ок.
Quatrix Мыслитель (5427) Ярослав, точно, порядок вывода надо предусмотреть
Остальные ответы
Привет, это Солнечный ветер Искусственный Интеллект (137822) 3 года назад
Делать удаленные вызовы на сервер несколько сот раз в секунду - это верный способ убить и сервер и девайс. Никогда так не делай
QuatrixМыслитель (5427) 3 года назад
там будет задержка в несколько секунд перед запросами. ..смысл таков, что это заливка товара в ok.ru по API. Человек указывает файл importa с картинками и описанием товара и начинается заливка, в прямом эфире показывается какая операция сейчас идет создание, удаление, редактирование какого товара и пр. ..удобная вещь
Привет, это Солнечный ветер Искусственный Интеллект (137822) Я все понимаю, но polling данных это позапрошлый век. Тысяча уников и сервер ляжет. Нужно использовать вебсокеты
QuatrixМыслитель (5427) 3 года назад
и это только для одного человека, так что ничего не убьется
Привет, это Солнечный ветер Искусственный Интеллект (137822) Если один юзер то ладно. По таймеру опрашивать сервер. Вызов функции из себя это смерть браузеру
Андрей Артамонов Просветленный (20334) 3 года назад
Реализуй это. При изменении текстового поля раз в N ms будет отправляться запрос. (Особенность в том, что если пользователь быстро печатает и не прошло N ms, то таймаут обнуляется. И будет отправлен один раз после N ms. Хз как еще проще объяснить) Это лучше, чем один и тот же раз в 10ms или 500ms отправлять.

https://learn.javascript.ru/task/debounce

Давно не пользуюсь jquery, насколько мне известно, там что-то подобное есть. Во всяком случае можешь использовать lodash (библиотека полезных фич)
Похожие вопросы