Acabo de comenzar a usar Laravel. Apenas he escrito ningún código todavía, ¡pero mis páginas están tardando casi un segundo en cargarse!
Esto es un poco impactante para mí cuando mis aplicaciones sin marco y las aplicaciones NodeJS tardan ~ 2ms. ¿Qué está haciendo Laravel? Este no es un comportamiento normal, ¿verdad? ¿Necesita algún ajuste?
performance
laravel
mpen
fuente
fuente
php artisan optimize --force
Respuestas:
Laravel es no realmente que lento. 500-1000ms es absurdo; Lo bajé a 20 ms en modo de depuración.
El problema eran las carpetas compartidas de Vagrant / VirtualBox +. No me di cuenta de que incurrieron en tal impacto de rendimiento. Supongo que debido a que Laravel tiene tantas dependencias (carga ~ 280 archivos) y cada una de esas lecturas de archivos es lenta, se acumula muy rápido.
kreeves me indicó la dirección correcta, esta publicación de blog describe una nueva característica en Vagrant 1.5 que le permite sincronizar sus archivos en la VM en lugar de usar una carpeta compartida.
No hay un cliente rsync nativo en Windows, por lo que tendrá que usar cygwin . Instálelo y asegúrese de marcar Net / rsync. Agregue
C:\cygwin64\bin
a sus caminos. [O puede instalarlo en Win10 / Bash]Vagrant presenta la nueva función . Estoy usando Puphet, por lo que mi Vagrantfile se ve un poco raro. Tuve que modificarlo para que se viera así:
data['vm']['synced_folder'].each do |i, folder| if folder['source'] != '' && folder['target'] != '' && folder['id'] != '' config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", id: "#{folder['id']}", type: "rsync", rsync__auto: "true", rsync__exclude: ".hg/" end end
Una vez que esté todo configurado, intente
vagrant up
. Si todo va bien, su máquina debería arrancar y debería copiar todos los archivos. Deberá ejecutarvagrant rsync-auto
en una terminal para mantener los archivos actualizados. Pagará un poco en latencia, pero para cargas de página 30 veces más rápidas, ¡vale la pena!Si está utilizando PhpStorm, su función de carga automática funciona incluso mejor que rsync. PhpStorm crea una gran cantidad de archivos temporales que pueden hacer tropezar a los observadores de archivos, pero si deja que se encargue de las cargas, funciona bien.
Una opción más es usar lsyncd . He tenido un gran éxito al usar esto en el host de Ubuntu -> invitado de FreeBSD. Todavía no lo he probado en un host de Windows.
fuente
artisan optimize
para un ligero impulso. Creo que el resto es principalmente cómo diseñas tu aplicación. Instalebarryvdh/laravel-debugbar
y busque cualquier lentitud.Para ayudarte con tu problema, encontré este blog que habla sobre cómo optimizar la producción de laravel. La mayor parte de lo que necesita hacer para que su aplicación sea rápida ahora estaría en manos de cuán eficiente es su código, su capacidad de red, CDN, almacenamiento en caché, base de datos.
Ahora hablaré del tema:
Laravel es lento fuera de la caja. Hay formas de optimizarlo. También tiene la opción de usar el almacenamiento en caché en su código, mejorando su máquina servidor, yadda yadda yadda. Pero al final, Laravel sigue siendo lento.
Laravel usa muchas bibliotecas de Symfony y, como puede ver en los puntos de referencia de techempower , Symfony ocupa un lugar muy bajo (último por decir lo menos). Incluso puede encontrar que el punto de referencia de laravel está casi en la parte inferior.
Se está llevando a cabo una gran cantidad de carga automática en segundo plano, se cargan cosas que quizás ni siquiera necesite. Entonces, técnicamente, debido a que laravel es fácil de usar, te ayuda a crear aplicaciones rápidamente, también lo hace lento.
Pero no estoy diciendo que Laravel sea malo, es genial , genial en muchas cosas. Pero si espera un gran aumento de tráfico, necesitará mucho más hardware solo para manejar las solicitudes. Te costaría mucho más. Pero si eres asquerosamente rico, puedes lograr cualquier cosa con Laravel. :RE
La compensación habitual:
Consideraría que C o Java tienen una curva de aprendizaje difícil y una capacidad de mantenimiento difícil, pero ocupa un lugar muy alto en los marcos web.
Aunque no demasiado relacionado. Solo estoy tratando de probar el punto de
easy = slow
:Ruby tiene una muy buena reputación en cuanto a capacidad de mantenimiento y facilidad para aprenderlo, pero también se considera que es el más lento entre python y php, como se muestra aquí .
fuente
Sí, Laravel ES realmente tan lento. Creé una aplicación POC por este motivo. Enrutador simple, con un formulario de inicio de sesión. Solo pude obtener 60 RPS con 10 conexiones simultáneas en un servidor oceánico digital de $ 20 (pocos GB de RAM);
Preparar:
2gb RAM Php7.0 apache2.4 mysql 5.7 memcached server (for laravel session)
Ejecuté optimizaciones, el compositor volcó la carga automática, etc., y en realidad bajé el RPS a 43-ish .
El problema es que la aplicación responde en 200-400ms. Ejecuté la prueba AB desde la máquina local en la que estaba laravel (es decir, no a través del tráfico web); y obtuve solo 112 RPS; con un tiempo de respuesta 200ms más rápido con un promedio de 300ms.
Comparativamente, probé mi aplicación PHP Native de producción ejecutando algunos millones de solicitudes al día en un AWS t2.medium (x3, carga balanceada). Cuando hice 25 conexiones simultáneas desde mi máquina local a eso a través de la web, a través de ELB, obtuve aproximadamente 1200 RPS. Gran diferencia en una máquina con carga frente a una página de "inicio de sesión" de Laravel.
Estas son páginas con sesiones (elasticache / memcached), búsquedas de bases de datos en vivo (consultas en caché a través de memcached), activos extraídos de CDN, etc., etc., etc.
Lo que puedo decir, laravel se pega alrededor de 200-300ms de carga sobre las cosas. Está bien para las vistas generadas por PHP, después de todo, ese tipo de retraso es tolerable en la carga. Sin embargo, para las vistas de PHP que usan Ajax / JS para manejar pequeñas actualizaciones, comienza a sentirse lento.
No puedo imaginar cómo se vería este sistema con una aplicación de múltiples inquilinos mientras 200 bots rastrean 100 páginas cada uno al mismo tiempo.
Laravel es ideal para aplicaciones simples. Lumen es tolerable si no necesita hacer nada elegante que requiera tonterías de middleware (IE, sin aplicaciones de múltiples inquilinos y dominios personalizados, etc.);
Sin embargo, nunca me gusta comenzar con algo que pueda enlazar y causar una carga de 300ms para una publicación de "hola mundo".
Si estás pensando "¿A quién le importa?"
.. Escriba una búsqueda predictiva que se base en consultas rápidas para responder a sugerencias de autocompletar en unos cientos de miles de resultados. Ese retraso de 200-300ms volverá locos a sus usuarios.
fuente
Descubrí que la mayor ganancia de velocidad con Laravel 4 se puede lograr eligiendo los controladores de sesión correctos;
Sessions "driver" file; Requests per second: 188.07 [#/sec] (mean) Time per request: 26.586 [ms] (mean) Time per request: 5.317 [ms] (mean, across all concurrent requests) Session "driver" database; Requests per second: 41.12 [#/sec] (mean) Time per request: 121.604 [ms] (mean) Time per request: 24.321 [ms] (mean, across all concurrent requests)
Espero que ayude
fuente
De mi concurso Hello World, ¿Cuál es Laravel? Creo que puedes adivinar. Usé el contenedor docker para la prueba y aquí están los resultados
Para hacer http-response "Hello World":
fuente
Utilizo bastante Laravel y simplemente no creo los números que me dice porque la renderización de un extremo a otro según la medición de mi navegador muestra un tiempo total MÁS BAJO desde la solicitud hasta la preparación.
Además, obtengo números ligeramente más altos en mi máquina en el trabajo, lo que ejecuta la página notablemente más rápido que mi máquina en casa.
No sé cómo se calculan esos números, pero no están corroborados por la observación, o herramientas de navegador como Firebug ...
Laravel no es tan lento, especialmente cuando está optimizado. Sin embargo, tiene hambre de memoria. Incluso un CMS pesado como Drupal, que es muy lento, parece tener aproximadamente 1/3 de la huella de memoria de una solicitud básica de Laravel.
Por lo tanto, para ejecutar Laravel en producción, lo implementaría en servidores optimizados para memoria antes que en servidores optimizados para CPU.
fuente
php artisan optimize
o hay más que podamos hacer?Sé que esta es una pregunta un poco vieja, pero las cosas cambiaron. Laravel no es tan lento. Como se mencionó, las carpetas sincronizadas son lentas. Sin embargo, en Windows 10 no pude usar
rsync
. Probé amboscygwin
yminGW
. Parece quersync
es incompatible congit for windows
la versión dessh
.Esto es lo que funcionó para mí: NFS .
Documentos vagabundos dice:
Esto ya no es cierto. Podemos usar
vagrant-winnfsd
plugins hoy en día. Es realmente sencillo de instalar:vagrant plugin install vagrant-winnfsd
Vagrantfile
:config.vm.synced_folder ".", "/vagrant", type: "nfs"
Vagrantfile
:config.vm.network "private_network", type: "dhcp"
Eso es todo lo que necesitaba para
NFS
funcionar. El tiempo de respuesta de Laravel disminuyó de 500 ms a 100 ms para mí.fuente
¡Me enfrenté
1.40s
mientras trabajaba con un laravel puro en el área de desarrollo!el problema estaba usando:
php artisan serve
para ejecutar el servidor webcuando usé el servidor web apache (o NGINX) en lugar del mismo código, lo bajé a
153ms
fuente
Como nadie más lo ha mencionado, descubrí que el depurador xdebug aumentó drásticamente el tiempo. Serví una página dinámica básica "Hola mundo, la hora es 2020-01-01T01: 01: 01.010101" y usé esto en mi httpd.conf para cronometrar la solicitud:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" **%T/%D**" combined
% T es el tiempo de servicio en segundos,% D es el tiempo en microsegundos. Con esto en mi php.ini:
[XDebug] xdebug.remote_autostart = 1 xdebug.remote_enable = 1
Obtuve tiempos de respuesta de alrededor de 770 ms, pero con ambos configurados en 0 para deshabilitarlos, saltó a 160 ms instantáneamente. Ejecutar ambos lo redujo a 120 ms:
La desventaja es que si hice cambios de configuración o ruta, necesitaría volver a almacenarlos en caché, lo cual es molesto.
Como nota al margen, curiosamente, mover el sitio de mi SSD a un disco duro giratorio no proporcionó beneficios de rendimiento, lo cual es muy extraño para mí, pero supongo que tal vez esté almacenado en caché, estoy en Windows 10 con XAMPP.
fuente
Laravel es lento, porque en la mayoría de los casos, usar PHP para páginas web es lento.
Con Laravel, todo el marco se reconstruye en cada invocación; es por eso que todas las páginas apuntan a index.php. Dado que todo el marco son scripts PHP, todos deben pasar por el intérprete de PHP, cada vez. Cuanto más grande sea el marco, más tiempo llevará.
Compare esto con un "entorno de servidor" (por ejemplo, tomcat) donde el servidor ejecuta el código de inicialización una vez y, finalmente, todas las páginas estarán en código nativo (después de JIT).
Como ejemplo de referencia, usando el mismo hardware, sistema operativo, etc., un simple 'hola mundo' usando JSP en este hardware es de 3000 rps, el mismo hola mundo en laravel es de 51 rps.
La forma más fácil de probar la sobrecarga del marco y el RPS máximo resultante por núcleo es usar Apache AB y un valor de concurrencia de 1, con un simple 'hola mundo' que es dinámico (para evitar el almacenamiento en caché de páginas estáticas).
fuente