• 14435
  • 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
1864

Загрузка...
Loading...

Комментарии

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

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

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

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

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

Прогноз эксперта: в Казахстане будут жить 5 миллионов китайцев

Прогноз эксперта: в Казахстане будут жить 5 миллионов китайцев

В ближайшие годы в Центральной Азии будут проживать восемь миллионов китайцев, считает заведующий отделением востоковедения национального исследовательского университета высшей школы экономики.
kurmanovainur
вчера / 11:23
  • 32023
  • 13
Они сделали это! Kaspi Bank презентовал свое мобильное приложение

Они сделали это! Kaspi Bank презентовал свое мобильное приложение

Изучив ошибки предшественников и собрав воедино новейшие идеи онлайн-банкинга, Kaspi Bank наконец выпустил... свое мобильное приложение!
niyazov
20 июня 2017 / 15:05
  • 8234
  • 5
Кайрат Келимбетов об азербайджанской инвестиции: «Вернется и «тело», и проценты»!

Кайрат Келимбетов об азербайджанской инвестиции: «Вернется и «тело», и проценты»!

Мы записали уникальное интервью с Кайратом Келимбетовым. Предлагаю вам посмотреть первую часть, где мы постарались по возможности поставить все точки на «I» именно по Азербайджанскому вопросу.
Zhumanova
19 июня 2017 / 12:00
  • 5911
  • 7
Почему мы должны быть благодарны журналисту Джеймсу Палмеру за критику ЭКСПО

Почему мы должны быть благодарны журналисту Джеймсу Палмеру за критику ЭКСПО

Как одним критичным постом зарубежному журналисту Джеймсу Палмеру удалось вскрыть сразу несколько гнойников казахстанского общества.
anotherblogger
21 июня 2017 / 0:39
  • 5768
  • 59
Долговое рабство: почему казахстанцы берут кредиты под 1330%

Долговое рабство: почему казахстанцы берут кредиты под 1330%

Эти кабальные займы никакой пользы для экономики не несут, при этом ухудшают финансовые возможности населения, пополняют ряды новых неплательщиков, тем самым создавая социальную напряженность в...
Armanjan
18 июня 2017 / 15:43
  • 3877
  • 28
Инфантильный миф о «молодом народе Казахстана» опасен. В 21-м веке ни у кого нет форы

Инфантильный миф о «молодом народе Казахстана» опасен. В 21-м веке ни у кого нет форы

Терпеть не могу миф о том, что мы "молодой народ, окруженный старыми нациями" и у нас еще есть время на развитие. Это чушь! Мы что - на миллион лет позже эволюционировали из обезьян?
Aks_Ras
18 июня 2017 / 10:16
  • 3143
  • 18
В Казахстане заблокировали сайт, раскритиковавший EXPO в «захолустной» Астане

В Казахстане заблокировали сайт, раскритиковавший EXPO в «захолустной» Астане

Все помнят Медузу и ЖЖ. Теперь в этот "особенный" список попал сайт Foreign policy. Предполагается, что причиной блокировки стала нелицеприятная заметка Джеймса Палмера об EXPO в Астане.
Seattle
19 июня 2017 / 15:40
В каких случаях у вас могут изъять удостоверение личности?

В каких случаях у вас могут изъять удостоверение личности?

Недавно один знакомый задал вопрос: «Я сейчас выступаю как свидетель по одному делу. У меня забрали удостоверение личности (УЛ) в РУВД и не вернули обратно. Так можно?». Я сразу задалась вопросом...
asselsabekova
21 июня 2017 / 10:17
  • 2281
  • 10
Инструкции по сопроводительному письму и собеседованию, которые подойдут всем

Инструкции по сопроводительному письму и собеседованию, которые подойдут всем

Наткнулась на статью Ассоциации юристов Новой Зеландии, в которой они дают советы выпускникам юрфака по поиску работы. Статья меня поразила, поскольку там описано все до мелочей, а их советы подойдут абсолютно всем.
asselsabekova
20 июня 2017 / 16:10
  • 2221
  • 6