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