- PVSM.RU - https://www.pvsm.ru -
У меня есть хобби-проект трекер.ру
Алгоритм такой: пользователь вводит поисковый запрос, этот запрос «на лету» ищет торренты на сторонних трекерах (рутор, рутрекер, tfile и тд).
Для параллельного поиска идет одновременно несколько аякс запросов, которые должны обработаться асинхронно.
Однако, запросы выполнялись синхронно. Если какой-то трекер долго не отдавал ответ, то остальные запросы подвисали и ждали ответа от подвисшего трекера. Общее время выполнение запросов равнялось сумме всех запросов. Хотя, по моим планам общее время должно было равняться самому долгому запросу.
Долго ломал голову, почему так. Грешил на HTTP pipelining [1]. Но, причина оказалась намного банальней. Все дело в сессиях. Дело в том, что сессии в php консистентны и php не даст обратиться другому процессу к уже занятой сессии.
Потыкать и полюбоваться результатом можно тут [2]. Посмотрите на общее время с сессиями и без.
Если сайт тормозит, то при открытии нескольких вкладок этого сайта, вкладки будут загружаться по очереди.
Если у вас контент подгружается множеством ajax запросов — то они будут выполняться тоже по очереди.
Изменение хандлеров сессии не поможет.
Как вариант — (об этом уже писали [3]на хабре) в быстром участке кода воспользоваться сессией, а потом выполнить session_write_close();
Автор: Voenniy
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/66798
Ссылки в тексте:
[1] HTTP pipelining: https://en.wikipedia.org/wiki/HTTP_pipelining
[2] можно тут: http://tracker.ru/pip.php
[3] писали : http://habrahabr.ru/post/37206/
[4] Источник: http://habrahabr.ru/post/232305/
Нажмите здесь для печати.