Drupal Site Geschwindigkeitssteigerung


7

Ich benutze eine Drupal-Site mit einem Thema von rockettheme.

Die Benutzer sind Mitgliedsbenutzer. Das Problem ist aus unbekannten Gründen, dass die Seite sehr langsam ist. Das Öffnen der Seite dauert ca. 20 Sekunden.

Ich habe versucht, den VPS zu wechseln, aber keinen Leistungsgewinn.

Ich verwende nicht viele Module, die die Site blockieren würden.

Welche möglichen Lösungen sollte ich prüfen, um die Geschwindigkeit der Website zu erhöhen und sie in der normalen Zeit zu öffnen?

120 Abfragen in 113,52 Millisekunden ausgeführt. Abfragen, die länger als 5 ms dauern, und Abfragen, die mehr als einmal ausgeführt werden, werden hervorgehoben. Die Ausführungszeit der Seite betrug 2534,15 ms.

87 Abfragen in 24,6 Millisekunden ausgeführt. Abfragen, die länger als 5 ms dauern, und Abfragen, die mehr als einmal ausgeführt werden, werden hervorgehoben. Die Seitenausführungszeit betrug 2609,59 ms.

123 Abfragen in 41,05 Millisekunden ausgeführt. Abfragen, die länger als 5 ms dauern, und Abfragen, die mehr als einmal ausgeführt werden, werden hervorgehoben. Die Seitenausführungszeit betrug 1282,27 ms.

Ich denke nicht, dass dies normal ist.


Ist es 20 Sekunden, bevor die Seite überhaupt geladen wird, oder insgesamt 20 Sekunden?
DisgruntledGoat

Sie betonen Mitgliederbenutzer , was in der Tat ein wichtiger Hinweis wäre. Stellen Sie also sicher, dass die 20 Sekunden nur für angemeldete Benutzer gelten, nicht jedoch für anonyme Website-Besucher.
Steffen Opel

Die Zeit ist für anonyme Benutzer. Ich weiß nicht, ob ich darf, ich möchte den Site-Link geben, damit die Community hier auf einige subtile Mängel hinweisen kann.
Nikhil

Könnten Sie bitte die jeweiligen Versionen der folgenden verwendeten Komponenten angeben: Drupal, jQuery, MooTools (dazu später mehr); Idealerweise auch Apache, PHP, MySQL. Ohne in der Lage zu sein, auf die Site zu schauen, werden diese Informationen die richtige Beurteilung der verschiedenen Artefakte erleichtern, die bereits noch präsentiert / diskutiert wurden.
Steffen Opel

Ich habe meine Antwort bezüglich möglicher Konflikte zwischen jQuery und MooTools aktualisiert. Bitte geben Sie die angeforderten Versionen nach Möglichkeit noch an.
Steffen Opel

Antworten:


1

Aktualisieren:

Ich habe festgestellt, dass das Laden einer bestimmten Datei mootools.js in ylsow viel Zeit in Anspruch nimmt, aber das Öffnen der Datei direkt - es gibt keine Verzögerung.

Das ist schließlich ein ziemlich guter Hinweis - wird MooTools wirklich benötigt? Drupal verwendet jQuery ausschließlich in Kernmodulen, und die meisten bereitgestellten Module tun dies ebenfalls. Beachten Sie daher, dass die gleichzeitige Verwendung von mehr als einem wichtigen JavaScript-Framework von den meisten Entwicklern im Allgemeinen nicht empfohlen wird, in der Regel mindestens eine dedizierte Behandlung erfordert und möglicherweise eingeführt wird Alle Arten von seltsamen (dh schwer zu debuggenden) Problemen, unabhängig davon: In jQuery + MooTools
finden Sie viele verwandte Beiträge zu Stack Overflow. In dieser beispielhaften Antwort auf Mootools und JQuery Integration werden insbesondere große Seitenverlangsamungen erwähnt.

Da Sie nicht viele Module verwenden, werden wahrscheinlich nur in einem isolierten Funktionsbereich speziell nach MooTools gefragt. Daher schlage ich vor, dass Sie dies vollständig deaktivieren (dh sicherstellen, dass mootools.js nicht mehr geladen ist) und prüfen, ob es einen Unterschied macht.


Sie können sich die verschiedenen Antworten auf eine entsprechende Frage zum Stapelüberlauf ansehen - während sie sich in der Zwischenzeit meistens mit den hier angegebenen überschneiden, gibt es in den Kommentaren hier und da einige zusätzliche Erkenntnisse.

Ansonsten möchte ich noch einmal eine wichtige Sache hervorheben, wie von DisgruntledGoat und bpeterson76 bereits teilweise erwähnt (jeweils +1):

Trotz Drupal nicht die schnellsten CMS in erster Linie sein, die Ladezeiten Sie sehen nicht normal sind überhaupt (wenn möglich auf schlecht konfigurierte Systeme / Server) - deshalb sollten Sie wirklich analysieren und identifizieren , die Ursache (n) erste , bevor Sie Optimierungen jeglicher Art anwenden! Sicher, einige empfohlene Optimierungen könnten auch ohne das helfen, aber die goldene Regel für Leistungsoptimierungen (und andere) ist wirklich, das Problem zu verstehen und nicht Versuch und Irrtum.

Um Ihnen den Einstieg zu erleichtern, möchte ich drei speziell angesprochene Themen kommentieren und einen Hinweis auf eine gründlichere Dokumentation zu den folgenden Themen geben:

Ich habe versucht, den VPS zu wechseln, aber keinen Leistungsgewinn

  • Okay, trotzdem sollten Sie explizit prüfen, ob der verwendete VPS- und LAMP-Stack überhaupt normal funktioniert (dh ohne Drupal).
    • Die Antwort von bpeterson76 befasst sich mit möglichen Ursachen.

Ich denke, der Hauptschuldige ist das Thema.

  • Dann sollten Sie diese Annahme überprüfen, was leicht möglich ist, indem Sie zu einem anderen Thema wechseln, vorzugsweise einem mit bekannten Leistungsmerkmalen, z. B. dem Standard-Garland-Thema.

Ich glaube nicht, dass die SQL-Abfrage fehlerhaft ist.

  • Sie haben bereits erkannt, dass Sie diese Annahme ebenfalls überprüfen sollten - dies kann auf verschiedene Arten angegangen werden. Ich würde mit dem Entwicklungsmodul beginnen , das verschiedene Angebote zur Leistungsprotokollierung einschließlich der SQL-Ausführungszeit enthält (die anderen Dinge sind natürlich ebenfalls nützlich ).
    • Beachten Sie, dass Sie für genauere SQL-Ausführungszeiten auf dedizierte Tools für das verwendete Datenbanksystem zurückgreifen sollten.

All dies und noch viel mehr wird über Drupal-Caching, Geschwindigkeit und Leistung angegangen - dieser Ressourcen-Hub mag auf den ersten Blick überwältigend aussehen, aber wie gesagt , das Verständnis des Problems ist der Schlüssel zur Lösung von Leistungsproblemen -, um dennoch einen Starthilfe zu ermöglichen Schließlich empfehle ich ausdrücklich, die Überlegungen zur Serveroptimierung zu lesen , insbesondere den Abschnitt Grundlegendes und Konfigurieren Ihres Stacks für die Leistung .

Viel Glück!


Autsch, ich habe gerade festgestellt, dass Sie in der Zwischenzeit bereits mit dem Entwicklungsmodul begonnen haben. Tut mir leid (wurde beim Schreiben abgelenkt und habe vor dem Posten vergessen, es erneut zu überprüfen). Ich werde die Antwort für den Moment behalten und in Betracht ziehen, sie eventuell anzupassen oder zu löschen, je nachdem, wie Das Thema entwickelt sich.
Steffen Opel

Vielen Dank für diese Eingabe. Seit du das Entwicklungsprotokoll gesehen hast, habe ich gepostet. Ich wäre hilfreich zu wissen, was dazu führen kann, dass die Ausführungszeit der Seite so hoch wird. Was sollte das normale sein. Dies würde mir sicherlich helfen, dem Problem auf den Grund zu gehen.
Nikhil

4

Wenn die Seite 20 Sekunden lang geladen wird, liegt wahrscheinlich irgendwo ein schwerwiegender Engpass vor. APC kann es auf 5-10 Sekunden reduzieren, aber das ist für den Server immer noch nicht gut genug. Und es hilft nicht, wenn der Engpass eine SQL-Abfrage ist.

Module können die Site ein wenig verlangsamen, aber nicht so sehr. Deaktivieren Sie nacheinander alle, um festzustellen, ob es große Verbesserungen gibt.

Eine andere Lösung, wenn Sie die Geschwindigkeit nicht so stark verbessern können, besteht darin, Seiten so weit wie möglich zwischenzuspeichern. Bei verschiedenen Sites (mit CodeIgniter) habe ich festgestellt, dass dies einen RIESIGEN Unterschied macht - der Server reagiert sofort und Sie haben wirklich nur die clientseitige Zeit.

Abhängig davon, was Sie in die 20-Sekunden-Verzögerung einbeziehen (dh nur serverseitig oder auch clientseitig), ist die Seite mit den Best Practices von Yahoo möglicherweise hilfreich.


Um festzustellen, wo der Engpass liegt, suchen Sie nach Profiler-Modulen für Drupal (falls vorhanden), die Ihnen mitteilen, in welchen Teilen der Code langsam ist. Sie können der Vorlage auch einen eigenen Timing-Code hinzufügen:

$time1 = microtime();
// some chunk of code
$time2 = microtime();
// another chunk of code
$time3 = microtime();
echo 'First chunk: ', ($time2-$time1/1000), ' seconds';
echo 'Second chunk: ', ($time3-$time2/1000), ' seconds';

Wiederholen Sie dies an verschiedenen Stellen, und Sie sollten in der Lage sein, es auf ein oder zwei Abschnitte zu beschränken, die 10 bis 20 Sekunden lang ausgeführt werden.


Ich glaube nicht, dass die SQL-Abfrage fehlerhaft ist. Ich denke, der Hauptschuldige ist das Thema, aber nur um sicherzugehen, dass SQL in Ordnung ist, wie soll ich vorgehen?
Nikhil

@Nikhil: Hast du verschiedene Themen ausprobiert? Wenn das Problem mit einem anderen Thema (mit denselben Modulen) behoben wird, ist es definitiv so.
DisgruntledGoat

Ich könnte mich irren, ich habe gerade die Leistungsprotokollierungsergebnisse des Entwicklungsmoduls veröffentlicht. Sind auch SQL schuld?
Nikhil

@Nikhil: Ja, über 80 Anfragen für eine Seite sind eine Menge! Aber es heißt, dass sie nur 113 ms gebraucht haben, so dass es unwahrscheinlich ist, dass dies ein großes Problem verursacht.
DisgruntledGoat

Ich hatte also Recht, die SQL-Abfragen sind nicht schuld. Es ist eher ein Themenproblem. Ich installiere APC. Ich lasse den Fortschritt wissen, damit andere davon profitieren können.
Nikhil

3
  • Verwenden Sie einen Opcode-Cache wie APC
  • Verwenden Sie ein Tool wie xDebug , um festzustellen , wo Ihre Engpässe liegen. Auf diese Weise wissen Sie, was Sie ansprechen müssen, anstatt nur zu raten.

Ja, ich habe über das Gleiche nachgedacht. Ich sehe auf einigen Websites, dass sie die Zeit gemessen haben, die auf ihrem Server benötigt wird, um Abfragen auszuführen. Wie kann ich das auch machen? Die 20 Sekunden Zeit habe ich durch Zählen gemessen. Gibt es dafür ein System?
Nikhil

2

Beim Erstellen von PHP-Apps habe ich festgestellt, dass ich mit Firefox oder den Entwicklertools von Chrome Engpässe auf niedriger Ebene beseitigen kann. Klicken Sie auf die Registerkarte Ressourcen und beobachten Sie, wie die Elemente der Seite geladen werden. Dies ist besonders wertvoll, wenn Sie mit XHR-Anforderungen (AJAX) arbeiten.

Beginnen Sie, indem Sie den Server anpingen. Ich habe eine Dev-Maschine, die sich neulich in einer ähnlichen Situation befand ... Die Dev-Maschine kriecht und benötigt mehr als 10 Sekunden zum Laden. Aber ich habe identischen Code auf einem anderen identischen (aber dedizierten) Server, der blitzschnell läuft. Bei Ping-Tests ist es schmerzhaft langsam. Es stellt sich heraus, dass der Computer gemeinsam genutzt wird und eine der anderen Personen mit einem Konto auf dem Server eine Site mit ultrahoher Bandbreite (wahrscheinlich eine Site für Erwachsene) ausführt, die alle anderen verlangsamt. Diese beleidigende Site wird jetzt vom Host entfernt.

Xdebug ist sicherlich eine gute Option, wie oben erwähnt. Es kommt jedoch nicht immer zur Ursache des Problems, wenn keine Fehler ausgegeben werden. Ich würde zuerst mit dem Fehlerprotokoll beginnen und sicherstellen, dass keine weiteren erstellt werden. Dann Xdebug.

Ich würde folgen, indem ich die Funktionen einzeln deaktiviere. Außerdem lohnt es sich, die Serverlast zu überwachen, um sicherzustellen, dass die MySQL- oder Apache-Prozesse nicht durch etwas anderes beeinträchtigt werden.

Wenn das Problem immer noch nicht behoben ist, würde ich die Bereiche, von denen ich glaube, dass sie das Problem verursachen, isolieren und Start- / End-Mikrozeit-Zeitstempel einfügen, die ich als Protokoll oder E-Mail ausgeben möchte. Es klingt albern einfach, aber ich habe mit dieser Methode eine Leistungssteigerung von mehr als 200% im Code festgestellt.


Nach deinem Rat habe ich Yslow in Firebug mit Mozilla verwendet. Ich habe festgestellt, dass das Laden einer bestimmten Datei mootools.js in ylsow viel Zeit in Anspruch nimmt, aber das Öffnen der Datei direkt - es gibt keine Verzögerung.
Nikhil

Das Drupal läuft auf einem VPS, hat versucht, Funktionen zu deaktivieren - kein Problem gefunden. Ich denke, ich werde es mit Xdebug versuchen.
Nikhil

1
Nikhil, eine Geschwindigkeitsverbesserung, die auf Stack * immer wieder diskutiert wurde, ist das Laden Ihrer JS-Framework-Dateien von einem CDN wie Google. Hier ist der Link für den Einstieg: code.google.com/apis/libraries/devguide.html . Ich bin mir nicht sicher, ob Sie das mit direktem Öffnen gemeint haben, aber es kann helfen.
bpeterson76

1

Ist das Caching aktiviert /admin/settings/performance?

Es lohnt sich, dies noch einmal zu überprüfen, bevor Sie sich mit komplizierteren Lösungen befassen.


Ich weiß, dass es ein bisschen offensichtlich ist, aber ich hatte das Gefühl, dass es erwähnt werden musste
WalterJ89

Das Zwischenspeichern lohnt sich, aber das ursprüngliche Problem wird dadurch nicht gelöst. Einmal pro Stunde (oder wie lang der Cache auch sein mag) muss ein Benutzer 20 Sekunden warten, bis die Seite generiert wird.
DisgruntledGoat

Ja, es ist eingeschaltet. Vielen Dank für den Hinweis.
Nikhil

0

Ich empfehle Postgresql zu verwenden, drupal unterstützt es.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.