Ich habe eine von mir untersuchte Site, die schwerwiegende Leistungsprobleme aufweist. Mit memcache konnte ich die Anzahl der Abfragen sowohl in Bezug auf die Anzahl als auch auf die Gesamtausführungszeit (von 3 Sekunden auf 230 ms) verringern, aber die Ausführungszeit der Seite ist mir entgangen (ich bin es) Betrachtet man die von devel ausgegebenen Werte, so ist nach meinem Verständnis die Ausführungszeit der Seite = die für die Ausführung von PHP benötigte Zeit. Daher habe ich APC installiert und kann sehen, dass PHP-Opcode zwischengespeichert wird und Statistiken mit Treffern in der APC-Systemsteuerung (apc.php im Lieferumfang von APC) angezeigt werden Die Ausführungszeit meiner Seite sinkt nicht. Ich denke, meine Frage ist zweifach:
- Was alles trägt zur (langsameren) Seitenausführungszeit bei? Ist es nur Zeit, um PHP auszuführen?
- Welche Maßnahmen sollte ich ergreifen, um die Ausführungszeit der Seite zu verkürzen? Ich habe versucht, APC, aber nicht viel Hilfe
Die Anzahl der auf dieser Site verwendeten Module ist nur enorm (168), aber im Moment bin ich nicht in der Lage, diese Empfehlung abzugeben, es ist eher wie ein Feuer in der Grube.
Edit: Ausgabe von xhprof auf lokaler Instanz (empfohlen von mikeytown), das scheint verrückt zu sein Ich denke, die späteren Ergebnisse sind auf Thrashing zurückzuführen? Diff-Läufe für dieselbe URL haben drastische Unterschiede und einen zu hohen Ressourcenverbrauch. Auch nicht sicher, warum es Werte anzeigt, die nicht von heute sind: | (Ich habe gerade xhprof auf diesem Laptop installiert)
quelle
EDIT: Ich habe den Originalbeitrag falsch gelesen. 168 Module sind eine Menge, und 300 bis 700 ms SQL-Abfragen sind riesig . Je mehr Module Sie verwenden, desto mehr Anfragen werden gestellt, sobald Module welche ausführen.
Verwenden Sie aggressives Caching, solange Sie können. Cachen Sie alles. Wenn es nicht ausreicht, versuchen Sie es mit einem Reverse-Proxy-Cache. Die Verwendung eines CDN für Dateien kann das Ganze erheblich verbessern. Ein Reverse-Proxy-Cache kann Ihnen auch helfen, indem Sie einige Auth-Cookies entfernen, wenn Sie Seiten aufrufen, für die er nicht benötigt wird (dann glaubt Core, der Benutzer sei für diese anonym und maximiert das Caching).
Die Drupal-Kerndynamik verlangsamt die Morgendämmerung, sobald zu viele Module gleichzeitig interagieren.
Wenn Sie beispielsweise viele Module verwenden, die Daten zum Zeitpunkt hook_node_load () laden, anstatt Felder zu verwenden, werden viele Abfragen durchgeführt, während die Feldnutzung die Caching-Effizienz gewährleistet hätte.
Das Rendern kann auch viel Zeit in Anspruch nehmen, drupal_render () (die Rendering-API, die manchmal aufgerufen wird) ist eine nette API (sehr nützlich), aber auch ein bisschen langsam. Das Umschalten auf PDO (D7) und das volle DBTNG (was übrigens großartig ist) erhöhen auch die nicht zu vernachlässigende Latenz.
Das heißt, der Kern an sich ist recht schnell (aber er führt zu viele SQL-Abfragen durch, auch wenn fast nichts installiert ist), schlecht codierte Module sind oft der Engpass.
APC kann die Ausführungszeit je nach ausgeführtem Code auf 2 oder 3 aufteilen. Wenn Sie es gut konfigurieren (aktivieren Sie alle APC-Optimierungen, das offizielle APC-Handbuch ist gut geschrieben und wird Sie führen).
Wenn Sie sich in einer Box mit einem langsamen Dateisystem (Netzwerkdateisystem oder langsame Festplatte) befinden, kann dies einen sichtbaren Einfluss auf die Ausführungszeit haben. Drupal besteht aus vielen kleinen Dateien, wodurch PHP gezwungen ist, jedes Mal, wenn es eine von ihnen lädt, I / O auf dem FS durchzuführen (APC hilft auch sehr dabei).
Ein falsch konfiguriertes DBMS kann auch ein ziemlich hässlicher Engpass sein, wenn Sie mit MySQL überlegen, ob Sie eine Feinabstimmung vornehmen möchten. Wenn Sie ein Shared-Hosting-System verwenden, das nicht Drupal-spezifisch (oder bereit) ist, sind DBMS- und PHP-Stapel wahrscheinlich falsch konfiguriert oder nicht optimiert, was zu sehr langsamen Websites führen kann.
Vergessen Sie nicht, alle Caches zu aktivieren. Wenn Ihre Website nicht benutzerorientiert authentifiziert ist, aktivieren Sie das aggressive Seiten-Caching (es ist wirklich erstaunlich).
Je mehr Blöcke Sie haben, desto langsamer werden die Seiten, und die Blöcke des Views-Moduls stellen einen Engpass dar (abhängig von den von Ihnen verwendeten Views-Plugins kann der Block von OG eine echte Belastung sein), wenn Sie deren Sichtbarkeit nicht einschränken Auf Seitenbasis oder mit benutzerdefiniertem PHP-Code (jeder andere Block kann auch die Blocksichtbarkeit manuell festlegen. Dies hilft dem Framework erheblich, da es nicht versucht, leere Blöcke zu rendern.)
Vermeiden Sie Module, die hook_init () verwenden. Hook_init () wird auf jeder Seite ausgeführt, auch wenn Sie eine 403 oder eine 404 erhalten, die alles verlangsamt (dies verlangsamt sogar die Generierungszeit von | imagecache | style und 404-Fehler in Dateien würden auftreten) Dämmerung langsam, nur um Ihnen zu sagen, dass die Datei nicht existiert).
quelle