• 14092
  • 181
  • 10
Нравится блог?
Подписывайтесь!

Асинхронность PHP, очередная попытка изменить мир

Дорогие ребята, этот пост посвящён в первую очередь новичкам (хотя, по опыту могу сказать, что зачастую у веб-программистов большие проблемы с адекватностью самооценки), опытные зубры наверняка знают всё, что я собираюсь написать (здоровая критика приветствуется).

Итак, о чём это я? Асинхронность. Ваши скрипты, которые выдают что-то в браузер клиенту (будь то html-код, картинка или заголовок "302 Location /somewhere/else") должны делать как можно меньше операций. Всё, что делается в таких скриптах - делается синхронно (пришёл запрос, обработали данные, выдали результат). Всё, что делается синхронно - заставляет клиента ждать. Когда клиент вынужден ждать, он начинает ненавидеть ваш сайт и лично вас. Когда клиент ненавидит вас, у вас портится карма, потом здоровье и вас начинают преследовать неприятности :)

Как этого избежать? Делать как можно больше работы асинхронно. Для этого, в большинстве случаев, вполне хватает возможностей cron'а и php-скриптов.

Например, вам нужно отправить сообщение с подтверждением регистрации по электронной почте. Как делают обычно?

register_user();
mail($to, $subject, $body, $headers);
echo
"Спасибо за регистрацию";

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

Чтобы избежать тормозов нужно воспользоваться фичей, которая называется очередью сообщений. Вместо отправки сообщения напрямую на почту мы можем записать его в файл или в базу, а обработать этот файл или запись в скрипте, который будет вызван из cron'а.

Да, пользователь получит письмо через минуту, а не моментально. Но эта задержка не критична для пользователя и для работы сайта, зато сайт будет работать значительно быстрее.

Другой пример - кеширование. Можно генерировать кеш так:

if(!($entry = $cache->read($key))) {
$entry = get_entry($key);
$cache->save($entry, $key);
}

Проблема здесь в том, что некоторые пользователи будут запрашивать страницу, когда кеш пуст. Если на получение значения (функция get_entry) требуется значительное время, пользователи будут ждать. А если в этот момент на сайт зайдёт значительное количество пользователей, сайт может упасть.

Решение, конечно же - асинхронность. Мы можем генерировать кеш из cron-скрипта, например, раз в 3 минуты, выставив время жизни кешу 4 минуты. Таким образом, пользователи сайта всегда будут получать информацию из кеша.

А можно поступить иначе - воспользоваться всё той же очередью сообщений. Заводим в базе таблицу, в которую будем писать ключи кеша, которые нужно перегенерировать. Cron-скриптом обрабатываем очередь и обновляем кеш. На сайте, скажем, при публикации комментария добавляем запись с нужным ключём в очередь, чтобы через минуту этот ключ обновился. Таким образом мы не привязываем обновление кеша к определённому временному промежутку, любой ключ может быть обновлён в любое время.

Подводя итог - используйте асинхронность везде, где это только возможно. Например, на главной странице сайта www.zakon.kz синхронно выводится только блок авторизации.

Ps: Тут ещё один пример применения асинхронности и очереди сообщений для оптимизации счётчика посещений

9 сентября 2010, 11:09
1814

Загрузка...

Комментарии

OhShi
0
0
Привет!
Будет лучше, если ты перенесёшь статью в это или это сообщество. Личные блоги читает мало народа, так что такие посты теряются.
А как это сделать? На странице редактирования нет выбора сообщества, хотя в "веб-разработку" я вступил.
OhShi
0
0
Для публикации в сообщество нужна карма +5, раньше тебе не хватало.
пока ничего не изменилось :(
+ записи и в карму.
Услышав про асинхронность, люди больше думают об AJAX.
А раз тема коснулась cron-а и php,
то можно было бы рассказать о том, как строится backend php-приложений на cron -е.
И немножко про подводные камни, например, о проблемах с отладкой.

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

Обратная сторона Астаны. Девять худших и проблемных районов столицы Казахстана

Обратная сторона Астаны. Девять худших и проблемных районов столицы Казахстана

Несмотря на то, что Астана столица, и один из самых красивых и современных городов Казахстана, здесь все равно есть места, за которые стыдно и даже как-то неудобно перед гостями.
Washington
12 янв. 2017 / 12:25
  • 21484
  • 26
Как мы «скидываемся» на красивую жизнь мажоров. Воровство пенсионных денег

Как мы «скидываемся» на красивую жизнь мажоров. Воровство пенсионных денег

Официальные спикеры КНБ РК рассказали о ходе расследования, раскрыв общественности схему, которую использовало руководство ЕНПФ для воровства 5 миллиардов тенге пенсионных накоплений.
openqazaqstan
13 янв. 2017 / 11:30
  • 14416
  • 12
«Ещё раз на те же грабли». Премьер Сагинтаев о временной регистрации

«Ещё раз на те же грабли». Премьер Сагинтаев о временной регистрации

Казахстанцы по-прежнему с нескрываемым возмущением и сарказмом комментируют нововведения в миграционное законодательство. Проблема, как это ни парадоксально, в том, что мы, казахстанцы – народ законопослушный.
openqazaqstan
12 янв. 2017 / 10:07
  • 11427
  • 29
10 лучших районов Алматы. Широкие улочки, частные дома, летом – красота!

10 лучших районов Алматы. Широкие улочки, частные дома, летом – красота!

Названия улиц: Садовый бульвар, Солнечный проезд. Красиво звучит не так ли? Прям, как в Москве... Уютные улочки и радующие глаз одноэтажные домики, тихо и свободно, нет динамики, движух и ажиотажа.
gelberdeuet
16 янв. 2017 / 14:45
  • 7063
  • 93
Наверное, я себя почувствовала человеком именно в Корее. Не в Казахстане

Наверное, я себя почувствовала человеком именно в Корее. Не в Казахстане

Если я останусь в Казахстане, то идти мне здесь некуда, пахать за копейки на госслужбе? Прожить всю жизнь в однокомнатной вместе с котом и мамой?
savira6
13 янв. 2017 / 9:44
  • 5226
  • 32
Айсулу Салгарина. Решил пойти в гости к той, что вызывает гордость за казахских девушек

Айсулу Салгарина. Решил пойти в гости к той, что вызывает гордость за казахских девушек

Прошло около 2 лет. За эти годы в моей жизни многое изменилось. И мне стало интересно, какие же изменения произошли в жизни тех, у кого я когда-то брал интервью...
DastanIskakov
14 янв. 2017 / 11:43
  • 4597
  • 5
Многочасовые очереди, смерти в ЦОНах: почему вопросы об этом ставят парламентариев в тупик?

Многочасовые очереди, смерти в ЦОНах: почему вопросы об этом ставят парламентариев в тупик?

Ожидали ли депутаты Мажилиса всего этого? Как планировали этот процесс регистрации, и обсуждали ли его, прежде чем одним нажатием кнопки принять нормы с такими абсурдными временными рамками?
openqazaqstan
вчера / 14:32
  • 3825
  • 20
Сейчас даже дяденьки и тетеньки в 20-27 лет живут с родителями. Безработица в Алматы

Сейчас даже дяденьки и тетеньки в 20-27 лет живут с родителями. Безработица в Алматы

Наверняка, все знают крылатую фразу Ленина "Кто не работает - тот не ест" В то время за безработицу осуждали, а кормили народ за счет предприятия - славные были времена, пусть я и застала их лишь...
DoZa
13 янв. 2017 / 9:54
  • 4148
  • 44
Временная регистрация: расскажу про «грабли» и «доступную информацию»

Временная регистрация: расскажу про «грабли» и «доступную информацию»

Есть такой феномен - «каскад доступной информации». Из-за него и весь сыр-бор с законом. Точнее из-за его игнорирования законотворцами. В который раз... Вот и получили социальный кипиш...
Aks_Ras
12 янв. 2017 / 15:56
  • 2438
  • 5