Ir al contenido

Cuándo Laravel es la elección equivocada

Laravel es un buen valor por defecto y un mal universal. Seis situaciones en las que es la herramienta equivocada, escritas por gente que vende Laravel y preferiría no vendérselo dos veces.

4 min de lectura

Vendemos ingeniería Laravel. Es una razón para desconfiar de un artículo como este y también una razón para escribirlo: la versión cara de esta conversación es la que ocurre dos años después, y preferimos tenerla ahora.

Laravel es un valor por defecto muy bueno para una aplicación web con una base de datos detrás. Esto es donde no lo es.

1. El trabajo es sobre todo cálculo, no sobre todo espera

Procesamiento de imagen y vídeo, trabajo numérico a gran escala, entrenamiento o inferencia de modelos, cualquier cosa que mantenga un núcleo ocupado durante segundos.

PHP no es mal lenguaje para calcular, pero el modelo de un proceso por petición significa que un trabajo pesado ocupa un worker durante toda su duración. Métalo en una cola y lo habrá movido, no resuelto: ahora necesita una flota de workers dimensionada para el trabajo más pesado.

Lo que funciona es Laravel como aplicación, con el paso pesado corriendo donde corresponde y comunicado como servicio. Lo que no funciona es intentar que PHP sea la capa de cómputo.

2. Miles de conexiones persistentes

Un chat, edición colaborativa en vivo, un servidor de juego, un feed de cotizaciones: cualquier cosa donde los clientes mantengan una conexión abierta y reciban envíos.

El modelo es un proceso por petición. Las conexiones de larga vida son la forma contraria, y aunque hay maneras de añadirlo, estará trabajando contra el entorno de ejecución en lugar de con él. Un servidor de tiempo real dedicado al lado de su aplicación Laravel es la disposición que funciona, y además es a la que va a llegar de todas formas.

Fíjese en el límite, porque importa: las notificaciones ocasionales enviadas a un navegador están bien y están bien soportadas. Es la difusión sostenida a gran volumen lo que no pertenece aquí.

3. Garantías duras de latencia

Por debajo del milisegundo, de forma constante, en el percentil noventa y nueve. Pujas publicitarias, datos de mercado, ingesta de telemetría a tasas muy altas.

Arrancar un framework por petición - incluso uno rápido, incluso con caché de opcode - no es cómo se llega a ese presupuesto. Un entorno de larga ejecución elimina el arranque, y en ese punto le está pidiendo a PHP que sea algo para lo que no fue diseñado cuando varios otros lenguajes ya lo son.

4. No hay capa web en absoluto

Una herramienta de línea de comandos, una aplicación de escritorio, un demonio, una biblioteca que instalarán otros desarrolladores. Laravel trae un kernel HTTP, una capa de enrutado, un contenedor configurado para una aplicación web y una estructura de directorios con forma de sitio. Si no se usa nada de eso, es peso sin beneficio.

Para una herramienta de consola, los componentes de consola de Laravel están disponibles por separado. Para una biblioteca, una biblioteca.

5. El equipo no escribe PHP

Un equipo de tres personas fuertes en otro lenguaje y que nunca ha entregado PHP producirá una aplicación mejor en lo que conoce. La calidad del framework es un factor menor que la fluidez, y no está cerca.

El caso contrario es la contratación: si espera hacer crecer el equipo, el mercado de PHP y Laravel es grande y la incorporación es corta. Ese es un argumento real para elegirlo a propósito, pero es un argumento sobre dieciocho meses vista, no sobre este trimestre.

6. Ya existe un producto que lo hace

El más común, y el que más cuesta cuando se ignora. Una tienda con catálogo simple, un blog, una página de reservas, un formulario interno.

El software a medida es un pasivo que mantiene para siempre. Una plataforma es una suscripción que puede cancelar. Construir debería empezar cuando la plataforma sea demostrablemente lo que le está costando dinero, que es un punto reconocible y no una sensación.

Dónde la respuesta es sí

Una aplicación web con base de datos relacional, usuarios con roles, trabajo en segundo plano, integraciones con terceros, una parte de administración, y un equipo que cambiará con los años. Eso es la mayor parte del software de negocio, y Laravel es genuinamente excelente en ello.

El framework no decide si esa aplicación sobrevive. Lo deciden el esquema, si los trabajos se pueden ejecutar dos veces sin daño, si alguien vigila la cola, y si las pruebas se darían cuenta de una regresión. Una aplicación que acierta en eso es mantenible en Laravel y en cualquier otra cosa. Una que falla en eso no la salva el lenguaje en que está escrita.

Esta página responde la pregunta general. Si ya lo ha reducido a dos candidatos, la comparación concreta es mejor lectura: Symfony cuando la discusión es cuánta arquitectura quiere que le den hecha, Rails si la lista corta son dos frameworks full-stack con opinión, Django cuando el otro lenguaje del equipo es Python, y Node cuando lo que construye es una API y nada más.

El caso que esta página no cubre es aquel en el que el producto es contenido y no comportamiento. Ahí la alternativa no es otro framework, y la comparación que merece leerse es WordPress, donde nuestra respuesta es más veces que no que se quede donde está.

Preguntas relacionadas

¿Laravel es malo a gran escala?
No, y la pregunta suele estar mal planteada. Las aplicaciones que se caen a escala lo hacen por su base de datos, por el diseño de sus colas o por una caché que nadie midió, y todo eso sobrevive intacto a un cambio de framework. Laravel corre en sistemas grandes; lo que no corre en sistemas grandes es un join sin índice.
¿El problema es PHP más que Laravel?
A veces, y en concreto donde el trabajo es de larga duración, concurrente y con muchas conexiones: el modelo de un proceso por petición encaja mal con esa forma, da igual qué framework vaya encima. El PHP moderno es rápido y el Laravel moderno está bien construido; lo que no ha cambiado es para qué está diseñado el entorno de ejecución.
Ya lo construimos en Laravel y ahora no encaja.
Normalmente es un componente y no toda la aplicación, y la respuesta es mover ese componente y no la aplicación. Un servidor de websockets o una tubería con mucha computación pueden correr en otra cosa y hablar con la aplicación Laravel, lo que deja el resto donde está.
¿Deberíamos reescribir a otra cosa?
Casi nunca, y menos aún mientras el motivo no esté claro. Averigüe primero qué le está costando de verdad: si es un endpoint lento o un despliegue frágil, una reescritura no cambia ninguno de los dos y cuesta un año.

← Volver a todos los artículos

Llamar+1 848 272 7583WhatsApp+90 850 308 5436Correoinfo@codefacture.comPágina de contacto