Todos los artículos

Estrategias de Precarga de Recursos con Vite en Laravel 11.21

Julian Beaujardin
Julian Beaujardin Reference: Laravel News September 4th, 2024

El equipo de Laravel lanzó la versión 11.21 esta semana, que incluye estrategias de precarga de recursos para Vite, un método conveniente para forzar la eliminación definitiva de modelos con 'soft deletes', actualizaciones de los helpers de pruebas y más.

Estrategias de Precarga de Recursos para Vite

Tim MacDonald contribuyó con la capacidad de pre-cargar activos generados por Vite de manera anticipada:

Este PR agrega la capacidad de que las aplicaciones pre-carguen de forma anticipada los fragmentos de JavaScript y CSS generados por Vite. El objetivo es reducir el retraso/coste de la red al navegar a través de una SPA front-end.

Las aplicaciones construidas con Vite a menudo usan "división de código". Esta técnica divide el JavaScript (y CSS) en "fragmentos" más pequeños. Cuando se carga una página, solo los fragmentos necesarios para renderizarla son cargados, lo que lleva a tiempos de carga más rápidos para las aplicaciones. Por ejemplo, cuando llegas a la página principal no tienes que pagar el coste de descargar y analizar también el JavaScript del panel de administración.

Para configurar la precarga, puedes añadir uno de los siguientes métodos en el método boot() de un proveedor de servicios:

// En el método `boot()` de un proveedor de servicios:

Vite::useWaterfallPrefetching(concurrency: 10);
Vite::useAggressivePrefetching();
Vite::usePrefetchStrategy('waterfall', ['concurrency' => 1]);

Consulta el Pull Request #52462 para más detalles de uso, incluidos vídeos de recursos basados en los tipos de estrategias de precarga.

Hacer que expectsChoice() sea más intuitivo con arrays asociativos

Jess Archer realizó actualizaciones al método de aserción expectsChoice() cuando se pasa un array asociativo:

$this->choice('Elige una opción', [
    'one' => 'Uno',
    'two' => 'Dos',
    'three' => 'Tres',
]);

Al usar expectsChoice(), antes necesitabas escribir la expectativa de la siguiente manera:

// Antes
$this->expectsChoice('Elige una opción', 'one', [
    'one',
    'two',
    'three',
    'Uno',
    'Dos',
    'Tres',
]);

Después de actualizar a Laravel 11.21, ahora puedes hacer lo siguiente:

// Después
$this->expectsChoice('Elige una opción', 'one', [
    'one' => 'Uno',
    'two' => 'Dos',
    'three' => 'Tres',
]);

Consulta el Pull Request #52408 para más detalles.

Forzar la eliminación definitiva de un modelo con SoftDeletes

Jason McCreary contribuyó con un método forceDestroy() para eliminar un registro usando el trait SoftDeletes:

// Antes
$comment = Comment::find(1);
$comment->forceDelete();

// Después
Comment::forceDestroy(1);

// Destruir múltiples registros
// Además, `forceDestroy()` devuelve un conteo de registros destruidos:
$count = Comment::forceDestroy([1, 2]);

Añadir countBetween() a AssertableJson

Borys Żmuda contribuyó con un método between() a la clase AssertableJson, que afirma que los elementos son mayores o iguales al mínimo, o menores o iguales al valor máximo:

$response->assertJson(fn (AssertableJson $json) => $json
    ->countBetween(10, 30)
    ->etc(),
);

Obtener una respuesta de flujo del cliente HTTP de Laravel

Einar Hansen contribuyó con un método resource() a la clase Response del cliente HTTP, que te permite obtener directamente un recurso de flujo PHP desde el cuerpo de la respuesta:

// Antes
use GuzzleHttp\Psr7\StreamWrapper;

$response = Http::get($imageUrl);
Storage::disk('s3')->writeStream(
    'thumbnail.png',
    StreamWrapper::getResource($response->toPsrResponse()->getBody()),
);

// Después
$response = Http::get($imageUrl);
Storage::disk('s3')->writeStream('thumbnail.png', $response->resource());

Consulta el Pull Request #52412 para más ejemplos y detalles de implementación.

Añadir withoutHeaders() como helper en las pruebas

Milwad Khosravi contribuyó con un método withoutHeaders() para omitir encabezados durante una solicitud de prueba. Ya era posible eliminar encabezados individualmente, y esta actualización permite eliminar varios encabezados en una sola llamada:

// Antes:
$this
    ->withoutHeader('name')
    ->withoutHeader('foo')
    ->from('previous/url');

// Después:
$this
    ->withoutHeaders(['name', 'foo'])
    ->from('previous/url');

Notas de la versión

Puedes ver la lista completa de nuevas características y actualizaciones a continuación y la diferencia entre 11.20.0 y 11.21.0 en GitHub. Las siguientes notas de la versión provienen directamente del changelog.