php - soporta - Aplicación de Laravel muy lenta al conectarse a la base de datos.
optimizar consultas sql server (2)
Nota: Ahora que sé de dónde viene el problema, modifiqué la pregunta. Ahora solo contiene la información necesaria.
Soy nuevo en el framework PHP Laravel.
Tengo una aplicación muy pequeña trabajando en mi computadora. Está conectado a una base de datos MySQL y tiene un modelo de usuario. Uso la clase Auth para iniciar y cerrar sesión.
Todo funciona bien, pero cuando estoy conectado, cargar una página tarda aproximadamente un segundo, lo cual es muy lento. Cuando no estoy conectado, es cuestión de milisegundos.
Al usar el perfilador incorporado, me di cuenta de dos problemas. Primero, como dije, cargar una página toma un poco más de 1000 milisegundos. En segundo lugar, el marco crea un SQL cada vez que carga una página cuando estoy conectado. La consulta busca un usuario con un ID determinado (mi ID). Supongo que está ahí para obtener información sobre el usuario que ha iniciado sesión. Pero no se supone que hay algún tipo de caché. ¿Será esto un problema si mi sitio web tendrá que gestionar muchas solicitudes por segundo?
Me di cuenta de que usar Auth::check()
en la vista es lo que está causando el problema. Tengo alrededor de 4 Auth::check()
es mi vista de Blade. Cuando no tengo ninguno, va rápido. Si tengo uno, es lento. Entonces, no importa cuántos tenga, no se vuelve mucho más lento. Es como si la inicialización de la clase Auth tomara demasiado tiempo o algo así. Supongo que explica por qué solo sucede cuando estoy conectado.
Me sumergí en el código de Laravel y descubrí que cuando se llama a Auth::check()
por primera vez, la clase Auth necesita "activar" mi sesión recuperando la información del usuario de la base de datos. Eso explica la consulta que se está ejecutando en cada solicitud de página. Pero como el generador de perfiles dice que la consulta no tarda ni milisegundos en ejecutarse, todavía no sé por qué ralentiza la aplicación.
Nueva información: incluso cuando no estoy enviando una consulta a la base de datos, el simple hecho de conectarse a ella toma casi un segundo. Esta es la razón por la que es lento. Creo que me estoy acercando mucho para resolver el problema.
¿Alguna idea hasta ahora?
Gracias por adelantado.
Notas
- El hecho de que
Auth::check()
esté en la vista no cambia nada. - Usar otro método como
Auth::guest()
no resuelve el problema. - Nuevo: lo que es lento es conectarse a la base de datos.
Finalmente encontré una manera de arreglar esto.
Al leer algunas publicaciones en muchos foros sobre XAMPP, MySQL y PHP, y leí en alguna parte que es preferible usar 127.0.0.1 porque locahost necesita una búsqueda de DNS adicional.
En el archivo de configuración de la base de datos, simplemente cambié locahost por 127.0.0.1 .
Ahora todo es rápido.
Encuentro esto realmente extraño. ¡Usar locahost en el archivo de configuración usado para hacer que la conexión de la base de datos tome más de un segundo!
No estoy de acuerdo con el ejemplo de Hammo. Tener cualquier información de usuario que no sea su ID dentro de la sesión es un riesgo de seguridad, razón por la cual la mayoría de los marcos toman esta ruta. ¿Se está ejecutando algo más cuando el usuario ha iniciado sesión, aparte de la consulta para su registro? Definitivamente no es eso lo que está ralentizando tu aplicación.