Примечание. Теперь, когда я знаю, откуда взялась проблема, я изменил вопрос. Теперь он содержит только необходимую информацию.
Я новичок в PHP-фреймворке Laravel.
У меня на компьютере работает очень маленькое приложение. Он подключен к базе данных MySQL и имеет модель User. Я использую класс Auth для входа и выхода.
Все работает нормально, но когда я вхожу в систему, загрузка страницы занимает около секунды, что очень медленно. Когда я не авторизован, это вопрос миллисекунд.
Используя встроенный профилировщик, я решил две проблемы. Во-первых, как я уже сказал, загрузка страницы занимает чуть больше 1000 миллисекунд. Во-вторых, фреймворк выполняет один SQL каждый раз, когда я загружаю страницу, когда я вхожу в систему. Запрос выполняет поиск пользователя с определенным идентификатором (моим идентификатором). Я предполагаю, что это нужно для получения информации о вошедшем в систему пользователе. Но разве там не должно быть какого-то кеша. Будет ли это проблемой, если моему сайту придется обрабатывать много запросов в секунду.
Я понял, что использование Auth::check()
в представлении является причиной проблемы. У меня около 4 Auth::check()
это мой Blade view. Когда у меня его нет, все идет быстро. Если есть, то медленно. Тогда, сколько бы у меня ни было, это не станет намного медленнее. Это как если инициализация класса Auth занимает слишком много времени или что-то в этом роде. Думаю, это объясняет, почему это происходит только тогда, когда я вхожу в систему.
Я погрузился в код Laravel и обнаружил, что когда Auth::check()
вызывается в первый раз, класс Auth должен «активировать» мой сеанс, извлекая информацию о пользователе из базы данных. Это объясняет, что запрос выполняется при каждом запросе страницы. Но поскольку профилировщик говорит, что для выполнения запроса не требуется даже миллисекунды, я до сих пор не знаю, почему он замедляет работу приложения.
Новая информация: даже когда я не отправляю запрос к базе данных, простое подключение к ней занимает почти секунду. Это причина того, что он медленный. Думаю, я очень близок к решению проблемы.
Есть идеи на данный момент?
Заранее спасибо.
Примечания
- Тот факт, что
Auth::check()
находится в поле зрения, ничего не меняет. - Использование другого метода, например
Auth::guest()
, не решает проблему. - Новое: подключение к базе данных происходит медленно.