Zwischenspeichern des Drupal-Bootstraps

10

Ich bin gespannt, ob jemand versucht hat, den Bootstrap-Prozess in Drupal zu "zwischenspeichern".

Normalerweise führt Drupal die 7 Bootstrap-Phasen bei jeder Anforderung aus, aber vielleicht könnte man auf einem bereitgestellten Produktionssystem einige oder alle davon "abschaffen"?

Mögliche Vorschläge, an die ich denke, könnten sein

  1. Serialisierung des Bootstrap-Status und Einfügen in den Memcache
  2. Ein Skript könnte einen Patch für bootstrap.inc generieren, der bestimmte Informationen in die Datei fest codiert.
  3. Ich glaube, David Strauss hat versucht, einen Drupal mit Bootstrap auf libevent am Laufen zu halten.
  4. Andere Verrücktheit?

Welche Versuche gibt es und welche sind als (etwas) zuverlässig bekannt?

Letharion
quelle
Dies hängt irgendwie mit meiner Frage zum Kompilieren von Drupal zusammen: drupal.stackexchange.com/q/11738/2916
Refineo

Antworten:

12

PHP ist eine gemeinsame Nichts-Architektur. Das hat seine Vor- und Nachteile.

Ein Nachteil ist, dass es nicht einfach ist, so etwas zu tun. Es gibt nicht viel von einem Zustand, der irgendwo gespeichert werden kann.

Ich habe einige schnelle Tests durchgeführt und wenn ich angemeldet bin, scheint der Boostrap ungefähr 17% der Gesamtzeit in Anspruch zu nehmen, und mehr als 50% davon laden tatsächlich alle .module- und .inc-Dateien. Das können Sie nicht im Memcache speichern. Außerdem scheint es nicht wichtig zu sein, ob ich Memcache oder den Datenbankcache verwende.

Ich habe versucht, einige Ergebnisse zu erzielen, wenn der Seitencache aktiviert war, aber Xhprof scheint dann keine zuverlässigen Ergebnisse zu liefern. das Ganze scheint einfach zu schnell zu sein. Aber selbst dann besteht der größte Teil darin, Init / Exit-Hooks auszuführen und Dateien zu laden, wie es scheint. Ich habe dort ein interessantes Problem gefunden: Es sieht so aus, als würde das Benutzermodul die zwischengespeicherte Seitenantwort ernsthaft verlangsamen, da es die Registrierung aufgrund des Entitätscontrollers in der .module-Datei auslöst.

Trotzdem zeigte David Strauss einige experimentelle Arbeiten in Kopenhagen, bei denen er nach dem Bootstrapping einen Speicher-Snapshot erstellte und nach dem Bereitstellen der Seite darauf zurückkam. Dafür hat er Drupal 6 benutzt. Nachdem ich mir die obigen Zahlen angesehen habe, stelle ich mir vor, dass die Leistungssteigerungen in Drupal 7 etwas geringer wären. Ein Grund dafür ist, dass die Datenbankverbindung verzögert geladen ist (und Sie können im Bootstrap ziemlich weit kommen, wenn Sie z. B. Memcache verwenden, bevor Sie die erste Abfrage ausführen müssen), und es wird eine Menge zwischengespeichert.

Was in Drupal 7 wirklich schlecht ist, ist die Renderebene mit diesen riesigen Arrays und endlosen Rekursionen und Schleifen. Das macht so ziemlich die gesamte Performance-Arbeit rückgängig, die in Drupal 7 geleistet wurde. Mal sehen, wie es in Drupal 8 aussieht, wenn Twig es in den Kern schafft.

Zuletzt zu den genannten Vorteilen. Ein großer Vorteil ist, dass Speicher-Lauch ziemlich irrelevant ist, da nach jeder Anforderung alles freigegeben wird. Ich habe viele Java-Anwendungen gesehen, bei denen die Speichernutzung ständig zunimmt und regelmäßige Neustarts erforderlich sind.

Berdir
quelle
4
Ich liebe es so sehr , dich auf der Seite @Berdir zu haben;)
Letharion
Alex Bronstein erwähnte während des Sprints, dass es etwas langsam ist, die tpl.php-Dateien einzuschließen, selbst wenn APC eine Statistik erfordert - aber Twig kompiliert zu Klassen, so dass dies auf Seiten wie Node + vielen Kommentaren ein Gewinn ist. Wir werden sehen.
Ich denke, Sie könnten ein System erstellen, in dem Sie für zwischengespeicherte Seiten eine Reihe von Umschreiberegeln generieren und diese in .htaccess einfügen, zusammen mit HTML-Seiten, um PHP vollständig zu umgehen. Könnte aber die Mühe nicht wert sein: IIS, Nginx, angemeldete Benutzer, ...
Bart
1
@ Bart: Sie haben gerade Boost neu erfunden: drupal.org/project/boost :)
Berdir
5

Nein, es war David Strauss, der unter https://code.launchpad.net/~fourkitchens/pressflow/6-evented mit Kargo-Event (jetzt Kellner) experimentierte, aber ich bezweifle, dass etwas Ernstes dabei herauskam.

Drupal 7 hat bereits eine Menge Bootstrap zwischengespeichert, dafür gibt es einen cache_bootstrapBin. Sie können es in memcached stecken.

Sie können über Bord gehen und das Laden von Code verringern, indem Sie einige / viele Drupal-Codes in C verschieben. Damien und dhthwy haben die PHP-Erweiterung unter http://drupal.org/project/drupal_php_ext erstellt. Es wird nicht viel damit gemacht. Oder HipHop machen. Ich kenne den aktuellen Stand von HipHop & Drupal 7 nicht.

Am Ende des Tages müssen Sie sich jedoch die technischen Kosten genau ansehen, um beispielsweise HipHop-Arbeit mit Drupal 7 (und all den Beiträgen!) Zu ermöglichen, und diese mit der Anmietung einiger weiterer Server vergleichen. Wenn Sie sparen können, sagen wir 5% Ihrer Server und Sie haben 100 000 Server, dann versuchen Sie es, aber sind Sie Facebook? Seien Sie vorsichtig und sparsam mit Optimierungen.


quelle
Danke, ich habe die Frage aktualisiert und Ihren Namen daraus entfernt. :) Mir ist klar, dass es in vielen Fällen weitaus effizientere Möglichkeiten gibt, mit Leistung umzugehen. Ich war größtenteils neugierig.
Letharion