Браузер тайм-аут Javascript рекурсивная функция, как решить? - PullRequest
0 голосов
/ 01 июля 2010

Мне пришлось разработать менеджер новостной рассылки с JS + PHP + MYSQL, и я хотел бы знать кое-что о том, как браузер отключает функции JS. Если я использую рекурсивную функцию, которая задерживает вызов самому себе (в то время как PHP возвращает список адресов электронной почты), как я могу быть уверен, что браузер не прекратит использовать эту функцию JS?

Я спрашиваю об этом, потому что я помню, как использовал аналогичный менеджер рассылок, что при выполнении запросов ajax после нескольких вызовов он останавливался без видимой причины. Я знаю, что JS не подходит для этого, и я должен использовать Crontab на сервере, но я не могу предположить, что пользовательский сервер обрабатывает cron, поэтому мне пришлось придерживаться JS + php.

PS - Это еще не произошло в этом приложении, я просто пытаюсь предотвратить худший из сценариев (так как я протестировал менеджер новостной рассылки, который работал так же, как этот, который я разрабатываю). Поскольку мой фиктивный список адресов электронной почты небольшой и задержки между вызовами также невелики, это работает просто отлично, но давайте представим список из 1000 контактов с задержкой между отправками 120 секунд: отправка 30 сообщений электронной почты за каждые 2 минуты.

Кстати, а почему это? Ну, на многих хостинговых серверах есть ограничение на количество писем, отправляемых в день или час, и это помогает предотвратить нарушение этой политики.

Спасибо за ваше время, любой комментарий по этому вопросу приветствуется; D

Ответы [ 3 ]

0 голосов
/ 01 июля 2010

Как насчет метаобновления . Это не вызовет тайм-аут в вашей функции JavaScript. Вы просто перезагружаете свою страницу через определенное время, а затем отправляете следующие электронные письма. Добавив параметр в URL, вы можете узнать, в каком «раунде» вы находитесь.

Может ли это сделать работу за вас?

0 голосов
/ 06 мая 2013

Вам нужно использовать setTimeOut.Код должен обеспечить контроль над потоком пользовательского интерфейса и позволить браузеру реагировать, чтобы избежать остановки скрипта.

Прочтите этот пост Ника Z. http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/

Есть также кое-чтоспецификация W3C об этом, называемая «Эффективная выдача скриптов», я не уверен, насколько она продвинута или какие-либо браузеры ее поддерживают.https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html

Вы также можете попробовать HTML5 Web Workers.

0 голосов
/ 01 июля 2010

с точки зрения mootools, здесь есть несколько возможных решений.

имеет множество опций, позволяющих обрабатывать партиирабочие места, посмотрите на это как на более сложный .periodical (setInterval), который понимает асинхронную природу результата и может компенсировать задержку и т. д. Я думаю, что он может буквально выполнять то, что вы установили в своих требованиях из коробки, все что вам нужно,oncomplete обратный вызов, который очищает выполненный от вашего ожидающего массива (например).

в основном, настройте все ваши запросы для обработкифрагменты данных и передать их в Request.Queue для последовательной обработки.Вероятно, менее изощренный с точки зрения контроля скорости отправки.

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