Anfang dieser Woche stieß ich bei der Arbeit mit der Laravel Rest API auf ein Ärgernis in Form eines Timeout-Fehlers. Dies führt zu Frustration der Endbenutzer über Entwicklungsbedenken. Lassen Sie mich das Gesamtszenario kurz erläutern:
Ich musste Daten aus einer externen Datenquelle laden, filtern und dann für eine JSON-Rückgabe vorbereiten. Die Datenmenge war nicht groß, nur etwa 10.000 in einer einzigen Anfrage. Das Hauptproblem trat auf, als ich versuchte, sie zu formatieren, nachdem ich sie abgerufen und gefiltert hatte. Also begann ich mit dem Debuggen mit dem folgenden Schritt:
Überprüfen Sie, ob die Abfrage optimiert ist und die Spalten ebenfalls indiziert sind.
Stellen Sie sicher, dass Sie die Chunk-Methode verwenden
Überprüfen Sie, dass das Formatierungs-Repo keine unnötigen Methoden/Referenzen/Implementierungen/unbenutzten Funktionen/externen API-Aufrufe verwendet.
Alle Prüfungen sind abgeschlossen, aber es wird immer noch ein Gateway-Timeout-Fehler angezeigt, da er mehr als 1 Minute überschreitet. Die Serviceklasse sieht wie folgt aus:
Die Repo-Klasse sieht wie folgt aus:
Mit bloßem Auge sollte es bei der Verarbeitung und Manipulation von mehr als 10.000 Daten keinen Timeout-Fehler geben. Wir werden am Ende besprechen, warum es passiert (vielleicht ist es kein wirklich konkreter Grund, aber wahrscheinlich) und besprechen nun, wie ich es mit der Laravel-API-Ressource lösen kann.
Es ist einfach zu implementieren. Generieren Sie zunächst die Laravel-API-Ressource über die Befehlszeile:
php artisan make:resource DataFormatterResource
Senden Sie dann Ihr Modellobjekt an die Ressource und formatieren/manipulieren Sie Ihre Daten gemäß den unten angegebenen Anforderungen:
Überraschenderweise dauerte die Antwort nur 3,7 Sekunden?!
Ich habe versucht, das eigentliche Problem hier herauszufinden und habe einige wahrscheinliche Fälle gefunden, die oben erwähnt wurden, um sie am Ende zu definieren. Die Fälle sind angegeben:
Bei den meisten Diensten meines Projekts habe ich Repo oder einen funktionalen Formatierer auf der Dienstebene verwendet, aber in diesem Fall hatte ich ein Problem, bei dem es andere Ursachen für das Auftreten dieses Problems geben könnte.
Was ich betonen möchte, ist, dass Laravel Resources in einigen schwierigen Situationen bei der Arbeit mit Modellen nützlich sein kann.
Wenn Ihnen dieser Artikel gefällt, hinterlassen Sie einen Klatsch oder einen Kommentar. = „Viel Spaß beim Codieren!….“ ?>
Das obige ist der detaillierte Inhalt vonLaravel-Ressource oder maßgeschneidertes Repo?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!