Ich hatte einige (größere) Leistungsprobleme in einem Projekt, an dem ich arbeite, und nachdem ich alle Abfragen protokolliert hatte, die ausgeführt wurden, wurde mir klar, dass viele von ihnen mehrfach ausgeführt werden und ich nicht zum Problem komme / p>
Alle Abfragen, die mehrfach ausgeführt werden, sind in meinem View-Composer-Provider.
So sieht mein View Composer aus:
%Vor%Diese beiden Abfragen (Sidbar- und Footer-Kategorien) werden etwa sechsmal ausgeführt, obwohl jedes Teil genau einmal aufgerufen wird. Sie werden beide in der Master-Ansicht mit @include ('Teilname') aufgerufen.
Ich habe es versucht:
%Vor%Aber der offsetExists gibt immer false zurück (selbst nachdem er 5. mal aufgerufen wurde).
Irgendeine Idee, warum das passiert und was ich falsch mache?
Bearbeiten:
Ich habe erkannt, wo das Problem liegt. Auf der Seite, die ich besuche (wo diese multiplen Abfragen ausgeführt werden), gibt es einige 404 Elemente (meistens Bilder). Jedes Mal, wenn eine Datei nicht gefunden wird, wird eine neue 404-Ausnahme ausgelöst. Und jedes Mal, wenn eine 404-Ausnahme ausgelöst wird, wird die 404-Ansicht ausgeführt = & gt; Bedeutung Fußzeile / Sidebar-Abfragen werden auch ausgeführt (wie sie ein Teil der 404-Ansicht sind). Beispiel: Ссылка
Die Folgefrage ist also, wie verhindert werden kann, dass die Ansicht gerendert wird, wenn dies nicht notwendig ist (Beispiel: 404 ist ein Bild, das nicht gefunden wurde).
Hier ist ein Stück Code von meinen Routen, von dem ich annehme, dass dies der Grund ist:
%Vor%PS: Ich weiß, dass dieser Teil des Codes extrem unoptimiert ist (da er grundsätzlich die gleiche Abfrage zweimal ausführt, einmal um zu sehen, ob das Element existiert, ein anderes Mal tatsächlich im Controller). Dies ist Arbeit in Arbeit und es ist auf Todo-Liste.
Bearbeiten 2:
Ich habe die nächste Lösung gefunden, ich bin offen für Verbesserungen, da dies eine ziemlich hack-ish-Art ist (wenn ich weitere Ordner hinzufüge, muss ich daran denken, dies auch zu aktualisieren). Ich habe nur 3 direkte Unterordner im öffentlichen Ordner: etwas, Dateien und Ressourcen.
Die Lösung besteht darin, das erste Segment der URL beim Rendern der Ausnahme zu prüfen (in der Datei app / Exceptions / Handler.php) und die 404-Antwort ohne die Ansicht zurückzugeben, wenn sie mit einem der drei Ordner übereinstimmt:
%Vor%Vielen Dank im Voraus
Richten Sie keine Dateianforderungen über Laravel und ein leeres Bild auf 404
.htaccess Beispiel:
%Vor%Sie würden dies über die Regeln stellen, die zu index.php
umleitenDies setzt voraus, dass Bilder von der Website und nicht durch Streaming von Datenbankinhalten bereitgestellt werden.
Grundsätzlich passiert Folgendes:
Im letzten Schritt sollten Sie also verhindern, dass die Bildanforderung sogar Laravel erreicht, indem Sie Ihr eigenes Bild gemäß den .htaccess-Regeln bereitstellen. So kann Ihr Webserver viel schneller auf das fehlende Bild reagieren.
Anstatt die URL-Segmente für die spezifischen Pfade zu überprüfen, und wenn Sie sagen, dass es nur Bilder sind. Also, wenn es nur für Dinge mit bestimmten Erweiterungen benötigt wird, können Sie das überprüfen und eine einfachere 404 Antwort für diese zurückgeben:)
%Vor%Habe gerade gemerkt, dass es viele Anfragen gab. Vielleicht so etwas, cache die Ergebnisse für 1 Minute, das sollte lang genug sein für die nächsten 404 Anfragen auf der Seite, um den Cache aufzunehmen, anstatt die Abfragen auszuführen:)
%Vor%