Ich habe mir den Speicherverbrauch in Wordpress genau angesehen. Auf meiner Website werden anscheinend für jeden Seitenaufruf 20 MB RAM zugewiesen, um eine komfortable Umgebung für die Ausführung aller Plugins vorzubereiten. Ich habe es folgendermaßen dargestellt:
Es gibt keinen einzigen zu optimierenden Punkt, keinen einzigen Bösewicht, der den größten Teil des Gedächtnisses aufnimmt. Der Verbrauch ist auf viele, viele PHP-Module verteilt.
Wie kann Wordpress veranlasst werden, seine Umgebung nur einmal im Speicher zu initialisieren und sie dann für jeden Treffer mehrmals zu verwenden? Ich möchte nicht, dass langsames PHP bei jedem Klick 20 MB frisst - selbst auf einem Server mit viel Arbeitsspeicher dauert es Sekunden, bis all diese Arbeit erledigt ist. Grundsätzlich benötigen Sie schreibgeschützte Speicherbereiche, die wiederverwendet werden können.
Also ... warum 20MB? Kann mir jemand einen Einblick geben?
Bearbeiten: Hier ist die WinCacheGrind-Ausgabe in Wordpress, die auf meinem Entwicklungscomputer ausgeführt wird (viel schneller als das gemeinsam genutzte Hosting). Wie Sie sehen, dauert es mehr als eine Sekunde, bis das HTML der Hauptseite erstellt ist. Verlangsamen Sie das durch Shared Hosting und Sie haben ein Rezept für Probleme. Ich habe die Methode gewählt, die die meiste Zeit in Anspruch nimmt. Wie würden Sie dies optimieren?
Bearbeiten: Hier sind Abfragestatistiken von diesem fantastischen functions.php Profiling Tool .
Laden: 12 Abfragen - 532 ms - 19,1 MB - 43 Cache-Treffer / 53 Abfrage: 15 Abfragen - 563 ms - 19,0 MB - 72 Cache-Treffer / 86 Anzeige: 21 Abfragen - 705 ms - 19,2 MB - 234 Cache-Treffer / 257
Edit: Willst du etwas sehen, das dich garantiert ausflippt? Fügen Sie diese Zeilen am Ende von index.php ein:
echo "<pre>\n";
print_r(get_defined_vars());
echo "</pre>\n";
Ich habe versucht zu zählen, wie oft der Körper des aktuellen Posts im Speicher gespeichert ist. Ich habe 20 Fälle gezählt. Dann wurde mir klar, dass PHP über eine Referenzzählung verfügt, sodass die Anzahl der Kopien auf drei reduziert wurde: Zwei scheinen sich in WP_Query zu befinden, eine im Objektcache. Ich recherchiere weiter.
Aus diesem Grund denke ich, dass WordPress überarbeitet werden muss, um die Speicherprobleme in den Griff zu bekommen. Sie können den Speicherverbrauch nicht länger auf die Komplexität seiner Funktionen zurückführen. Es macht einfach eine Menge Dinge falsch .
Edit: Nach einem Tag, um dies herauszufinden, sind hier meine Ergebnisse:
1) 88% des gesamten Speichers stammen aus Aufrufen des Typs require oder include oder include_once:
2) Die PHP-Datei enthält Informationen, die meistens während des ersten Teils der Bearbeitung einer Anfrage auftreten (nicht überraschend). Hier wird auch der gesamte Speicher aufgebraucht:
3) Es ist sehr interessant, alle Funktionen aufzuzeichnen, die während einer Anfrage ausgeführt werden. Insgesamt gibt es über 12000 Anrufe. Ich habe sie gezittert, um es sichtbarer zu machen (die Level-Achse ist im Grunde die Tiefe des Stapels):
4) Der einzige Weg, den ich mir vorstellen kann, besteht darin, die Anzahl der enthaltenen .php-Dateien zu minimieren. Wenn ich die Funktionen nach Dateien aufteile, aus denen sie stammen, können Sie feststellen, dass viele Dateien höchstens ein- oder zweimal aufgerufen werden. Wir brauchen eine Möglichkeit, diese zu überspringen, wenn sie nicht benötigt werden. Zum Beispiel wird mein Remote-Datenbank-Backup-Plugin geladen und registriert, nur um überhaupt nicht verwendet zu werden. Hier ist der obige Plot nach Dateinamen aufgeteilt:
Ich biete ein Kopfgeld an, das allen meinen Ruf wert ist :) für Umgestaltungen, die dazu führen würden, dass sich der Speicherbedarf meines Blogs um 30% oder mehr verringert.
Edit: Ich habe WP 3.1 installiert, hier ist ein Vergleich mit der alten Version.
Blau ist WP 3.1, Rot ist 3.0.4. Das neue WP ist schneller, verbraucht aber auch mehr Speicher.
Hier ist eine Liste nach Include-Datei.
Dies ließ mich erkennen, wie viel Speicher von "All In One SEO Pack" verbraucht wird - eine Möglichkeit wäre, nur einen Bruchteil der Funktionalität des Plugins zu nutzen, um das zu bekommen, was ich will. Außerdem scheinen meine eigenen Plugins ziemlich schlecht zu sein.
Ich möchte das bedingte Laden von zB comment.php (ich erlaube keine Kommentare in meinem Blog) und mehreren anderen versuchen. Ich habe den gesamten veralteten Code gelöscht. Ich habe kses.php runtergeschnitten, um die globalen Tabellen nur bei Bedarf zu laden. Ich habe l10n vereinfacht (ich mache keine Lokalisierung), so dass seine Funktionen die Zeichenketten sofort ohne Nachschlagen zurückgeben. Ich bin immer noch weit von der 30% -Marke entfernt, die ich willkürlich festgelegt habe.
Bearbeiten: Ich habe APC mit den Standardeinstellungen (32 MB Opcode-Cache) heruntergeladen und aktiviert. Hier ist der Vergleich:
Sie können sehen, dass das Laden des Codes massiv beschleunigt wurde und der Code auch weniger Speicherplatz beansprucht (wahrscheinlich, weil wir uns nur mit Opcodes befassen, nicht mit der Originalquelle). Der Speicherverbrauch ist aber immer noch recht hoch.
quelle
Antworten:
Die Mühe nicht wert. WordPress verbraucht nicht viel Speicher, nur weil. Es frisst viel Speicher, weil es viele Funktionen unter der Haube ausführt.
Mit dem statischen Cache-Plugin ist es viel einfacher und effizienter, Ergebnisse zwischenzuspeichern (Seite generiert) und diese bereitzustellen. Auf diese Weise werden die meisten Besucher WP nicht einmal selbst treffen.
quelle
Was für eine naive Schlussfolgerung. Lesen Sie Dinge sollten Sie niemals tun, Teil I .
Vielen Dank für die Speicherauslastung.
Viel später: Autommatic hat eine Bibliothek namens prefork veröffentlicht , die genau das tut, wonach Sie gefragt haben: Laden Sie den WordPress-Code nur einmal in den Arbeitsspeicher.
quelle
Ab WordPress 3.2 ist PHP 5.2 die Mindestanforderung. Ich denke, dass unter unseren Gürteln Teile des Kerns anfangen können, umstrukturiert zu werden, und Klassen mit automatischem Laden verwenden können. Auf diese Weise könnten wir das Laden einiger Codestücke vermeiden, es sei denn, sie würden tatsächlich benötigt. Wenn beispielsweise keine Einbettungen oder Galerien in einer Seitenansicht vorhanden sind, können wir möglicherweise vermeiden, dass viel Mediencode geladen wird.
Selbst wenn sie sich dazu entschließen, diesen Weg zu beschreiten, würde ich davon ausgehen, dass er sich langsam entwickelt (wie viele der anderen Veränderungen, die im Verborgenen geschehen sind). Es würde das Mischen vieler Dateien und Codes erfordern, was bei einigen Plugins möglicherweise zu einer Abwärtskompatibilität führen könnte.
Ein Teil des Problems (wenn man es wirklich so nennen kann) ist, dass das Core Framework ohne diese Art des bedingten Ladens nicht im Voraus wissen kann, welche Funktionalität es benötigt oder nicht benötigt, um die Inhaltsansicht zu generieren. Daher müssen viele Funktionen geladen werden, nur für den Fall, dass sie benötigt werden.
quelle
Es heißt Opcode-Caching.
http://en.wikipedia.org/wiki/PHP_accelerator
quelle
Sie werden es wahrscheinlich nicht schaffen, die RAM-Nutzung so stark zu reduzieren. Wenn Sie jedoch verwenden
mod_php
, möchten Sie möglicherweise zu wechselnmod_fcgid
.Während mod_php etwas langsamer ist, lädt es PHP, auch wenn es nicht benötigt wird, wie zum Beispiel das Bereitstellen von Bildern, statischen Dateien oder sogar das Zwischenspeichern. Wenn Sie viele Anfragen haben, ist dies viel RAM.
Mit fcgid wird dies erheblich reduziert.
auch wird eine statische Cache verwenden (wie w3total Cache) vermeiden Aufruf php überhaupt , die ein wirklich großer Vorteil ist: weniger RAM - Auslastung, weniger db - Verbindungen.
quelle
Ha. Ich arbeite an einem Web - App jetzt , dass ich voll mit Daten und die Nutzung über das, was mein Shared - Hosting - Konto zu überlasten beabsichtige umgehen kann, also entschied ich mich - während es super einfach gewesen wäre, in WP zu bauen - zu versuchen , von der Arbeit BackPress als ein Framework und bauen Sie nur das auf, was ich für meine spezifischen Anwendungsfälle brauchte.
So konnte ich meine Kernumgebung von Hunderten von PHP-Dateien in WP auf etwa die zwanzig reduzieren, die ich tatsächlich benötige, während ich weiterhin in der Lage war, alle Funktionen für Datenbank, HTTP, Benutzerverwaltung, Formatierung und Cron zu nutzen Funktionen, die ich in WordPress liebe.
Das Problem ist, dass es eine Menge Arbeit ist, und ich würde meinem Hackjob nie vertrauen, wenn es um etwas geht, das über meinen persönlichen Gebrauch hinausgeht. Wenn Sie die vollständige WP-Umgebung verwenden möchten, nehmen Sie sie so, wie sie ist. Es ist so gut wie es ist, weil Hunderte von Entwicklern es über mehrere Jahre hinweg verfeinert haben. Wie jeder hier gesagt hat, werden Sie viel weiter kommen, wenn Sie einen besseren Hosting-Plan finden und nach Caching-Techniken suchen, als wenn Sie wahrscheinlich den Kern hacken.
quelle
Ja, WordPress lädt zuerst alles und macht dann, was wir von ihm verlangen. Ich kann mich erinnern, dass wir irgendwo einen virtuellen Pool im RAM erstellen können, in dem wir Dateien ablegen können. Ich hatte die Idee, das gesamte WordPress in den Speicher (<10 MB) zu stellen und dann können wir eine Menge I / O-Vorgänge speichern, die allein einen Geschwindigkeitsschub bewirken sollten. Aber ich hatte nie die Gelegenheit, es zu versuchen, und außerdem bin ich nicht so geschickt darin, so etwas zu verfolgen. Aber es sieht einen Versuch wert aus.
quelle
ein paar grundsätzliche vorschläge:
Ich betreibe täglich eine bekannte WordPress-Seite mit großem Datenverkehr. Ich bin nicht auf "Dedicated Even", was großartig für mich ist :)
quelle