Maison >développement back-end >tutoriel php >Représenter les tâches à Laravel à l'aide de files d'attente

Représenter les tâches à Laravel à l'aide de files d'attente

William Shakespeare
William Shakespeareoriginal
2025-03-07 01:16:10550parcourir

Deferring Tasks in Laravel Using Queues

Cet article explore l'API de la file d'attente de Laravel, un outil puissant pour différer des tâches intensives en calcul pour améliorer l'expérience des utilisateurs et les performances du site Web. Nous couvrirons les concepts clés et les illustrerons avec un exemple pratique.

La vitesse du site Web a un impact significatif sur le référencement et la satisfaction des utilisateurs. Les temps de chargement de page lents proviennent souvent de blocs de code lourds des ressources. La solution? Reférer des tâches non critiques pour améliorer la vitesse globale. L'API de la file d'attente de Laravel fournit une façon rationalisée pour y parvenir.

L'API de la file d'attente de Laravel gère les travaux ajoutés à une file d'attente. Ces files d'attente sont associées à des connexions, qui à leur tour utilisent des pilotes de file d'attente spécifiques. Décomposons les composants:

pilotes de file d'attente

Similaire aux connexions de la base de données, l'API de file d'attente prend en charge divers pilotes, y compris la base de données, le beanstalkd, les SQS et Redis. Le pilote détermine où les informations de file d'attente sont stockées (par exemple, une base de données ou un serveur Redis). Deux conducteurs spéciaux, null, sont utiles pour les tests; null saute l'exécution du travail.

Connexions

La configuration de la file d'attente nécessite de spécifier une connexion par défaut. Cette connexion définit:

  • le pilote de file d'attente à utiliser.
  • Paramètres de configuration spécifiques au pilote.
  • Le nom de file d'attente par défaut pour les nouveaux travaux.

files d'attente

Des travaux sont ajoutés à la file d'attente par défaut, sauf indication contraire.

Maintenant, construisons un exemple du monde réel: générer des vignettes de l'image.

Création de votre premier travail de file d'attente

Générer plusieurs miniatures d'image en temps réel peut avoir un impact négatif sur l'expérience utilisateur, en particulier avec de grandes images ou de nombreuses miniatures. Au lieu de traitement en temps réel, nous reporterons cette tâche à une file d'attente. Cette approche offre une expérience utilisateur supérieure car la page principale se charge rapidement, et la génération de vignettes se produit de manière asynchrone.

Création du modèle d'image

Tout d'abord, nous créerons un modèle Image pour gérer les images téléchargées:

php artisan make:model Image --migration

Cela génère le modèle Image et un fichier de migration. Modifiez la migration ( Base de données / migrations / yyyy_mm_dd_hhmmss_create_images_table.php ) pour inclure le chemin d'image d'origine:

<?php
// database/migrations/YYYY_MM_DD_HHMMSS_create_images_table.php
// ...
$table->string('org_path');
// ...
?>

exécuter la migration:

php artisan migrate

Création d'un travail laravel

Nous utiliserons la bibliothèque d'images d'intervention pour le traitement des miniatures. L'installez via le compositeur:

php composer.phar require intervention/image

Créez le travail en utilisant la commande artisan:

php artisan make:job ProcessImageThumbnails

Remplacez le contenu de app / jobs / processimageThumbnails.php par:

<?php
// app/Jobs/ProcessImageThumbnails.php
// ...
public function handle()
{
    $image = $this->image;
    $full_image_path = public_path($image->org_path);
    $resized_image_path = public_path('thumbs' . DIRECTORY_SEPARATOR . $image->org_path);
    $img = \Image::make($full_image_path)->resize(300, 200);
    $img->save($resized_image_path);
}
// ...
?>

La méthode handle contient la logique de génération de miniatures.

tester le travail

Créons un formulaire de téléchargement d'image simple. Créez un contrôleur ( app / http / contrôleurs / imageController.php ):

php artisan make:model Image --migration

Créer une vue ( Ressources / vues / upload_form.blade.php ) et ajouter des routes dans routes / web.php :

<?php
// database/migrations/YYYY_MM_DD_HHMMSS_create_images_table.php
// ...
$table->string('org_path');
// ...
?>

La méthode upload gère les téléchargements de fichiers, les entrées de base de données et envoie le travail ProcessImageThumbnails.

Après le téléchargement, vérifiez l'ajout du travail au tableau jobs à l'aide d'une requête de base de données.

Le travailleur de la file d'attente

Les processus de la file d'attente sont en file d'attente. Commencez par:

php artisan migrate

Cette commande traite les travaux en attente. La sortie affichera l'état de traitement du travail. Pour un traitement en arrière-plan continu, utilisez un gestionnaire de processus comme le superviseur, le cirque ou similaire.

Conclusion

L'API de la file d'attente de Laravel gère efficacement les tâches à forte intensité de ressources, améliorant l'expérience utilisateur. Cet article a fourni une compréhension fondamentale et un exemple de mise en œuvre pratique. Pour un apprentissage plus approfondi, explorez les ressources sur Envato Market.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn