Maison  >  Article  >  développement back-end  >  Ressource Laravel ou dépôt personnalisé ?

Ressource Laravel ou dépôt personnalisé ?

PHPz
PHPzoriginal
2024-08-21 16:37:32370parcourir

Plus tôt cette semaine, lorsque je travaillais avec l'API Laravel Rest, j'ai rencontré un désagrément sous la forme d'une erreur de délai d'attente. Cela conduit à la frustration des utilisateurs finaux face aux problèmes de développement. Permettez-moi de résumer le scénario global :

J'avais besoin de charger des données à partir d'une source de données externe, de les filtrer, puis de les préparer pour un retour json. La quantité de données n’était pas importante, seulement environ 10 000 en une seule requête. Le principal problème est survenu lorsque j'ai essayé de les formater après les avoir récupérés et filtrés. J'ai donc commencé à déboguer en suivant l'étape suivante :

  • Vérifiez que la requête est optimisée et que les colonnes sont également indexées.

  • Assurez-vous d'utiliser la méthode des morceaux

  • Vérifiez que le référentiel de formatage n'utilise aucune méthode/référence/implémentation/fonctions inutilisées/appel d'API externe inutiles.

Toutes les vérifications sont effectuées, mais le message affiche toujours une erreur de délai d'expiration de la passerelle car elle dépasse plus d'une minute. La classe de service ressemble à ci-dessous :

Laravel Resource or Customized Repo?

La classe repo ressemble à ci-dessous :

Laravel Resource or Customized Repo?

À l’œil nu, cela ne devrait pas générer d’erreur de délai d’attente pour plus de 10 000 traitements et manipulations de données. Nous discuterons à la fin de la raison pour laquelle cela se produit (ce n'est peut-être pas une raison concrète mais probable) et discuterons maintenant de la façon dont je le résout à l'aide de Laravel Api Resource.


C'est simple à mettre en œuvre. Tout d’abord, générez la ressource Laravel Api à partir de la ligne de commande :

php artisan make:resource DataFormatterResource

Ensuite, envoyez votre objet modèle à la ressource et formatez/manipulez vos données selon les exigences indiquées ci-dessous :

Laravel Resource or Customized Repo?

Laravel Resource or Customized Repo?

Étonnamment, la réponse n'a pris que 3,7 secondes ?!
J'ai essayé de découvrir le vrai problème ici et j'ai trouvé quelques cas probables mentionnés en haut à définir à la fin. Les cas sont donnés :

  1. Les ressources de l'API Laravel fournissent une interface cohérente pour accéder et manipuler les données lorsque j'utilise un dépôt avec une injection de dépendances. Cela facilite l'écriture de code efficace et évite les goulots d'étranglement courants en matière de performances.
  2. Les ressources de l'API Laravel sont optimisées pour les performances car elles utilisent la mise en cache et d'autres techniques pour améliorer la vitesse de récupération et de traitement des données, là où je n'utilise qu'une partie du formatage brut du tableau.
  3. Les ressources de l'API Laravel sérialisent automatiquement les résultats des requêtes de base de données au format JSON ou XML, en fonction des en-têtes de requête. Cela vous évite d'avoir à écrire votre propre code de sérialisation.

Dans la plupart des services de mon projet, j'ai utilisé un référentiel ou un formateur fonctionnel au niveau de la couche de service, mais dans ce cas, j'ai eu une difficulté car il peut y avoir d'autres causes à ce problème.
Ce que je voulais souligner, c'est que les ressources Laravel peuvent s'avérer utiles dans certaines situations délicates lorsque l'on travaille avec des modèles.

Si vous aimez cet article, laissez un applaudissement ou un commentaire.

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
Article précédent:Jeu de pierre IIArticle suivant:Jeu de pierre II