Pruebas de Rendimiento en Laravel 5.5 5.6 5.7 5.8 vs PHP 7.1 7.2 7.3

Lito
3 min readMar 5, 2019

Aprovechando un momento libre me he puesto a realizar unos tests que hace algún tiempo tenía ganas de programar para analizar los tiempos y capacidad de respuesta de diferentes versiones de Laravel sobre diferentes versiones de PHP.

Como proyecto base he utilizado un proyecto personal llamado BeMyCrown que es compatible con todas las versiones de Laravel y PHP seleccionadas.

No ha sido posible incluir Laravel 5.4 debido a que el código del framework no es compatible con las siguientes versiones.

La idea es analizar si las mejoras aplicadas en las diferentes versiones de Laravel y PHP se notan realmente en el rendimiento de la aplicación.

El servidor de pruebas dispone de una CPU un Intel Core i5–8600K @ 3.60GHz con 16 GB de RAM y discos NVME.

La configuración de dependencias Composer es la siguiente:

"require": {
"php": ">=7.1.3",
"laravel/framework": "5.X.*",
"predis/predis": "^1.1",
"eusonlito/disposable-email-validator": "^0.1",
"eusonlito/laravel-packer": "^2.1",
"eusonlito/laravel-meta": "^3.1",
"eusonlito/laravel-gettext": "^2.0",
"eusonlito/laravel-form-manager": "^1.0",
"eusonlito/amazon-mws": "dev-master",
"h4cc/wkhtmltopdf-amd64": "0.12.3",
"mikehaertl/phpwkhtmltopdf": "^2.3",
"sentry/sentry-laravel": "^0.8",
"braintree/braintree_php": "^3.34"
}

Y para el testing he creado el siguiente script https://gist.github.com/eusonlito/b8ca1e80220f3791b3ae8bfa1d3c8d76

La ejecución genera una serie de logs de la herramienta `ab` y crea además los CSV que me permitirán generar las gráficas de comparación.

Como servidor uso el propio server.php que incluye Laravel, para evitar que factores como Apache o nginx pueda afectar al rendimiento.

Aquí están los resultados al completo https://docs.google.com/spreadsheets/d/1Mlgd-ds2pSQm-4QcJbGbronnOxFhSwekoSz0Ueti-50/edit#gid=0

1.000 peticiones en total con una sóla concurrente
1.000 peticiones en total con 10 concurrentes
1.000 peticiones en total con 100 concurrentes

Como se puede ver, la diferencia es mínima entre las diferentes versiones de Laravel (incluso se aprecia un descenso de rendimiento en las últimas versiones), pero sí mas notables según avanzan las de PHP.

Que los tests concurrentes obtengan mejores resultados creo que es algo anecdótico ya que el acceso a base de datos (que podría ser un cuello de botella) es mínimo.

Como conclusión, creo que Laravel debería ponerse las pilas de manera seria con el rendimiento global del framework, quizá quitando algo de magia en Eloquent, minimizando el uso de Facades, optimizando el Service Container o un poco de todo.

Aunque su rendimiento está por encima de otros frameworks de PHP, siendo un proyecto ya maduro debería enfocar su desarrollo en acercarse lo máximo posible a Symfony, el cual aún está muy muy por encima.

Por ahora, lo que lo salva es la sencillez y facilidades que ofrece al desarrollador, pero esto podría ofrecerlo en un futuro no muy lejano cualquier otro, y ya sólo nos quedaría considerar uno u otro según su rendimiento.

Taylor Otwell, aquí tienes algunas ideas: Microoptimizaciones de Laravel Framework ;)

Eso es todo amigos!

--

--