← Retour aux Labs

Laravel Performance

Laravel : chunk() ou get() ?

La différence entre charger 500 000 lignes en mémoire et traiter les données par lots.

$users = User::get();

foreach ($users as $user) {
    // traitement
}

get()

Charge tous les résultats en mémoire

$users = User::get();

// SELECT * FROM users

foreach ($users as $user) {
    // traitement
}

get() exécute la requête et charge tous les résultats dans une collection Laravel. Sur une petite liste, c’est pratique. Sur un gros volume, cela peut exploser la mémoire.

chunk()

Traite les résultats par lots

User::chunk(1000, function ($users) {
    foreach ($users as $user) {
        // traitement
    }
});

chunk() récupère un nombre limité de lignes, les traite, puis passe au lot suivant. C’est beaucoup plus adapté pour les exports, migrations ou traitements de masse.

Comparatif

Quand utiliser get() ou chunk() ?

Méthode
Comportement
Quand l’utiliser
get()
Charge tous les résultats dans une collection Laravel.
Petites listes, pages, dashboards, résultats limités.
chunk()
Charge les résultats par lots successifs.
Exports, migrations, emails, synchronisations, traitements de masse.

La règle simple

get()

À utiliser pour des petites quantités de données, typiquement une page, un dashboard ou une liste limitée.

chunk()

À utiliser pour les gros volumes : exports CSV, migrations, envoi d’emails ou synchronisations API.

Attention

chunk() n’est pas toujours la seule option.

Pour certains traitements très volumineux, cursor() peut être encore plus économe en mémoire, car il parcourt les résultats un par un. Ce sera un excellent sujet pour un prochain Lab.

Besoin d’aide sur Laravel ?

Votre application Laravel traite de gros volumes de données ?

J’accompagne les équipes sur l’optimisation Laravel, les APIs, les traitements asynchrones, les migrations et l’architecture backend.