Почему мое веб-приложение (WAMP) работает медленно, если я запрашиваю его несколько раз с помощью одного браузера / сеанса?
Первый запрос: http://url.tld/calc-sth-complicated
Второй запрос: http://url.tld/simple-view
У меня есть веб-приложение - Windows/Apache/PHP/MySQL. Если я использую один браузер (один сеанс) с несколькими вкладками для запроса веб-приложения, кажется, что второй запрос ожидает первый запрос.
Если я использую два браузера (две сессии), второй запрос не ждет первого. Как я могу это исправить? Что такое блокировка? Как я могу увидеть, что блокирует? Почему второй запрос ждет?
Спасибо
3 ответа
Обработчик сеанса PHP по умолчанию блокирует файл сеанса, пока активен любой скрипт, использующий сеанс. Выполнение нескольких запросов от одного и того же браузера к сайту заставляет все, кроме первого параллельного запроса, ожидать, пока файл сеанса не будет разблокирован.
Выполнение этого из двух полностью браузеров, что означает два разных сеанса, позволяет запросам выполняться параллельно, так как ни один сеанс не заблокирует другой.
Если вашему сайту требуется возможность делать несколько запросов в одном сеансе параллельно, вам следует session_write_close()
как можно скорее в каждом сценарии. Если скрипт не изменяет содержимое сеанса, вы можете сделать это немедленно ПОСЛЕ первоначального session_start()
вызов. Массив $_SESSION по-прежнему будет доступен и доступен для чтения, даже если сессия закрыта.
Браузер Это не имеет ничего общего с вашим приложением; браузеры имеют ограничения на количество запросов, которые они будут делать к одному серверу за один раз.
У меня была такая же проблема, вдруг каждый раз после session_start()
следующий запрос занял около 30 секунд. Я обнаружил, что файл сеанса в c:\wamp\tmp
был заблокирован первым запросом на 30 секунд. В течение этого времени второй запрос ожидал разблокировки файла.
Я узнал, что это как-то связано с rewrite_mod
а также .htaccess
,
Я инвалид rewrite_mod
и закомментировал каждую строку в .htaccess
и это снова работает как очарование.
Я не знаю, почему это произошло, потому что я не помню, чтобы изменить какие-либо настройки или конф на Wamp.