Für Menschen · Seien Sie begeistert und Sie werden begeistern !
Der eAccelerator kann auf Webservern zum Einsatz kommen, wird als Modul implementiert, ist Open Source und dient als Beschleuniger, Optimierer und Cache für PHP-Seiten. Mit Hilfe von phpinfo kann kann man schnell feststellen, ob das Modul aktiv ist - wenn ja, dann lohnt die Einbindung von WordPress. Dies ist recht einfach und dazu einige Hinweise.
Um mit WordPress den eAccelerator zu nutzen, muss der Standard Cache von WP ersetzt werden. Dazu gibt es eine Erweiterung, die ich ein wenig ergänzt habe. Die Ergänzung in der Syntax habe ich hinzugefügt, da ich im Backend von WordPress den eigenen Cache nutzen möchte, also Standard WordPress. Der Grund dafür sind diverse AJAX-Themen und dass die Aktualisierung zu gering ist. Das wirkt sich beispielsweise aus; wenn man Kommentare frei schaltet, dann wird die Zahl der ausstehenden Kommentare nicht aktualisiert. Ebenso gibt es an anderen Stellen diese Zeitspanne und daher nehme ich das Backend nicht mit in den Cache.
Nun aber zu einigen Werten, so dass man sich ein Bild machen kann, was die Nutzung des eAccelerator bei mir bewirkt hat.
Auf der Startseite bin ich ohne Optimierung mit Hilfe von Plugins oder sonstigen Geheimtricks auf 21 Queries gekommen. Nach Nutzung des eAccelerator bewege ich mich mit 8 Queries auf der Startseite und die Speicherauslastung geht von rund 18MByte auf rund 10MByte. Einfache Einblicke in den Speicher gibt beispielsweise das Plugin TPC Memory Usage und die Queries lese ich mit dem Plugin Debug Queries. Die Speichernutzung könnte man noch Steigern, in dem man zusätzlich zum eAccelerator den Zend Optimizer einsetzt. Nachlesen kann man das in diesem Beitrag WordPress memory usage reduced from 14MB to 1.4MB.
Der Cache von WordPress lässt sich einfach ersetzen, in dem an im Ordner wp-content eine Datei mir dem Namen ablegt, welche dann anstatt der WordPress eigenen cache.php gezogen wird.
if ( file_exists(WP_CONTENT_DIR . '/object-cache.php') ) {
require_once (WP_CONTENT_DIR . '/object-cache.php');
$_wp_using_ext_object_cache = true;
} else {
require_once (ABSPATH . WPINC . '/cache.php');
$_wp_using_ext_object_cache = false;
}
Diesen Weg geht auch die oben genannte Erweiterung, die ich ein wenig verändert habe, so dass im Admin-Bereich von WordPress der Cache von WordPress genutzt wird. Wer das ebenfalls nutzen möchte, der nutzt bitte den Code im folgenden und speichert ihn in einer Datei mit Namen object-cache.php. Die Original-Version, die auch gepflegt wird, findet ihr auf der Seite der Erweiterung von NeoSmart Technologies. Die bieten im übrigen auch Lösungen für den APC und XCache in Verbindung mit WordPress an.
<?php
/*
Name: eAccelerator for WordPress
Description: eAccelerator backend for the WP Object Cache, exlude the WP Backend.
Version: 0.6.1
URI: http://neosmart.net/dl.php?id=13
Author: Computer Guru
Author URI: http://neosmart.net/blog/
* Install this file to /wp-content/object-cache.php
* If on Windows, restart IIS after installing for best results
* 0.6.1 Small modification for wp-admin by Frank Bueltge - http://bueltge.de/
Thanks to Ryan Boren for his original memcached code.
*/
if ( strpos($_SERVER['REQUEST_URI'], 'wp-admin') !== false)
$wp_admin = TRUE;
// Gracefully revert to default cache if eAccelerator is not installed
if ( !function_exists('eaccelerator_get') || $wp_admin )
include_once(ABSPATH . WPINC . '/cache.php');
else {
//echo $_SERVER['REQUEST_URI'];
function wp_cache_add($key, $data, $flag = '', $expire = 0) {
return wp_cache_set($key, $data, $flag, $expire);
}
function wp_cache_close() {
return true;
}
function wp_cache_delete($id, $flag = '') {
global $wp_object_cache;
return $wp_object_cache->delete($id, $flag);
}
function wp_cache_flush() {
global $wp_object_cache;
return $wp_object_cache->flush();
}
function wp_cache_get($id, $flag = '') {
global $wp_object_cache;
return $wp_object_cache->get($id, $flag);
}
function wp_cache_init() {
global $wp_object_cache;
$wp_object_cache = new WP_Object_Cache();
}
function wp_cache_replace($key, $data, $flag = '', $expire = 0) {
return wp_cache_set($key, $data, $flag, $expire);
}
function wp_cache_set($key, $data, $flag = '', $expire = 0) {
global $wp_object_cache;
return $wp_object_cache->set($key, $data, $flag, $expire);
}
class WP_Object_Cache {
var $global_groups = array ('users', 'userlogins', 'usermeta');
var $cache = array();
function delete($id, $group = 'default') {
$key = $this->key($id, $group);
$result = eaccelerator_rm($key);
if ( $result )
unset($this->cache[$key]);
return $result;
}
function flush() {
eaccelerator_clear();
$this->cache = array ();
return true;
}
function get($id, $group = 'default') {
$key = $this->key($id, $group);
if ( isset($this->cache[$key]) )
$value = $this->cache[$key];
else
$value = eaccelerator_get($key);
$value = maybe_unserialize($value);
if ( NULL === $value )
$value = false;
$this->cache[$key] = $value;
return $value;
}
function set($id, $data, $group = 'default', $expire = 0) {
$key = $this->key($id, $group);
if ( is_resource($data) )
return false;
$data = maybe_serialize($data);
$result = eaccelerator_put($key, $data, $expire);
if ( $result )
$this->cache[$key] = $data;
return $result;
}
function key($key, $group) {
global $blog_id;
if ( empty($group) )
$group = 'default';
if (false !== array_search($group, $this->global_groups))
$prefix = '';
else
$prefix = $blog_id . ':';
return md5(ABSPATH . "$prefix$group:$key");
}
function stats() {
// Note that this is the total eAccelerator stats, not just WP but also any other apps using eAccelerator var storage
$eaccelerator_info = eaccelerator_info();
echo "<p>\n";
echo "<strong>Cached Variables:</strong> {$eaccelerator_info['cachedKeys']}<br/>\n";
echo "<strong>Cached Scripts: </strong> {$eaccelerator_info['cachedScripts']}<br/>\n";
echo "</p>\n";
if ( !empty($this->cache) ) {
echo "<pre>\n\r";
print_r($this->cache);
echo "</pre>\n\r";
}
}
function WP_Object_Cache() {
// Empty Constructor
}
}
} //End Else
?>
Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.
händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.
Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.
xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>
Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als < und > als > einfügt.
E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.
Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.
Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.
Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 886 Beiträge, 16217 Kommentare in 14 Kategorien und 448 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet.
Design und Code ist unter Copyright
© 2001 - 2010 bueltge.de [by:ltge.de]
9. September 2009 um 19:11
Läuft der interne wp-cache Mechanismus tatsächlich immer mit?
Gibt es keine wp-config.php Zeile mit der man den cache auf false setzt? Denn dann wäre ein code interessant der den wp-cache völlig abschaltet und zwar für den Redaktions- als auch den Produktions-Bereich.
Den eaccelerator und so weiter halte bei den heutigen Prozessoren ehrlich gesagt für überflüssig. Was nütze mir ein Prozessor der 10000 hits pro Sekunde verarbeiten kann, wenn ich nur 12 am Tag ausliefere und ich denke das betrifft 92% aller blogs.
Wer nutzt denn noch einen Pentium III?
9. September 2009 um 19:27
Hallo Frank,
sag mal, weißt Du ob eAccelerator bei all-inkl.com standardmäßig installiert ist? Ich habe die object-cache.php mit Deinem Code angelegt, merke aber bislang keinen Unterschied.
LG aus Berlin!
9. September 2009 um 20:12
@Daniel: der sollte nicht aktiv sein, alternativ nutze phpinfo und schaue in die Konfiguration.
9. September 2009 um 20:15
@dieter: läuft immer mit; sehe aber auch nicht, warum gerade in Produktions- und Redaktionsbereich kein Cache laufen sollte. Hier ist er doch besonders gefragt. Es gibt eine ganze Reihe von Blogs, die mehr als 12 am Tag ausliefern. Und Geschwindigkeit beim Besucher ist es immer wert.
9. September 2009 um 22:12
Bei mir brachte die reine Aktivierung des eAccelerators anstelle des ZendOptimizers in den PHP Einstellungen meines Hoster Hetzner schon sichtbares im Speicherverbrauch, statt ca. 43% sind es nun ca 11,4% bei 50MB RAM, das mit dem Cache hab ich zwar in der wp-config so drin und auch die "object-cache.php" im content Ordner mit dem Code erstellt aber bemerkbar macht sich bis jetzt noch nix, schön wäre sowas als richtiges WP-Plugin wo man eine kleine Statistik mit drin hat.
Gruß Sven
9. September 2009 um 23:04
@Sven: das ist korrekt, die reine Aktivierung cacht ja PHP. Aber der Cache von WP sollte ersetzt werden, er ist hier besser aufgehoben. Die Erweiterung hat eine Statistik, Funktion
stats(). Als Plugin geht das nicht, der Cache von WP lässt sich immer nur mit dieser genannten Methode ersetzen. Man könnte nur das Plugin für Inhalte im Backend etc. nutzen.10. September 2009 um 09:53
@Frank Danke, nun ist man wieder ein Stück schlauer, mit dem Thema Caching werde ich mich mal etwas mehr beschäftigen, der Speicherverbrauch ist ja nun schon gesenkt, jetzt gehts an den Output..
10. September 2009 um 13:09
PS: in einem aktuellen Beitrag gibt es einen Vergleich von diversen Modulen unter WordPress - wunderbar übersichtlich in einem Schema zu erkennen, Sprache ist nebensächlich
11. September 2009 um 15:44
Diese Aussage gilt aber nur, wenn man einen eigenen Server hat. Jeder der ein V-Server oder Webspace hat, muss sich den Prozessor (die Prozessoren) mit vielen anderen Benutzern teilen. Da macht es viel Sinn zu sparen.
11. September 2009 um 16:14
Danke für den Artikel Frank. Jetzt habe ich morgen, wenn es regnen sollte, was zu tun
12. September 2009 um 13:15
Als erstes: Danke!
Werde ich nun auch mal testen...
Aber damit ich alles verstehe... In welche datei steht (von Haus aus?!) die oben als erstes genannte "if file_exists" Abfrage?
14. September 2009 um 08:34
@Marc: immer wp-settings.php, im Root der Installation.
14. September 2009 um 15:26
... bedeutet, dass mir - insofern ich kein e-acc laufen habe - die Erweiterung nichts bringt? Sehe ich das richtig?
14. September 2009 um 22:31
@Daniel: ja, ohne das Modul wird die Erweiterung nicht aktiv.
22. September 2009 um 18:32
Hallo,
in dem Beitrag heißt es: "Um mit WordPress den eAccelerator zu nutzen, muss der Standard Cache von WP ersetzt werden."
Dumme Frage: Wieso muss der Standard Cache ersetzt werden? Sorry, irgendwie will mir das nicht einleuchten. :s
22. September 2009 um 20:31
@Bernd: Du hast recht, muss nicht. Will man aber mit WP den eAccelerator nutzen, intern, dann muss der eigene Cache von WP ersetzt werden, der läuft sonst im Standard, was er immer tut.
22. September 2009 um 21:07
Vielen Dank für den Artikel, hatte erst neulich bei einem Blog ein Problem mit zu groß gewordener Cache. Werd ich demnächst dann mal ausprobieren.
15. Oktober 2009 um 22:13
Hm, habe wohl ein Problem...
Verwende den Object-Cache wie oben gezeigt, aber mein Backend wird wohl doch ein wenig zuviel gecacht?!
z.B. bekomme ich keine Plugin-aktualisierungen mehr angezeigt.
Bin gerade per Zufall auf Plugins und war ganz überrascht, dass ein halbes Dutzend Updates vorliegen
Any ideas?
15. Oktober 2009 um 23:00
PS: Gerade nochmal getestet, Object-cache gelöscht:
Ein Refresh und neben dem "Plugins" Link in der Navi erscheint sofort die rote Zahl.
Mit dem Cache - nichts.
Also muss ja diese Anzahl der Aktualisierungen irgendwie ausserhalb des "wp-admin" Ausschlusses eingelesen werden?! Seltsam, irgendwie...
16. Oktober 2009 um 12:01
@Marc: ja, in dem Fall cacht der eAccelerator alles.
16. Oktober 2009 um 13:00
...kann man da vielleicht noch etwas, ausser wp-admin, aus dem Cache ausschliessen? Idee?
16. Oktober 2009 um 13:09
@Marc: habe ich schon versucht, ohne Erfolg. Ich vermute es liegt an der Methode Cache löschen, die bei mir nicht sauber klappt. Das wiederum liegt am eAccelelerator und nicht an WP.
16. Oktober 2009 um 19:38
Alles klar, danke Dir
Ich probiere jetzt mal den 0.9.6 RC von eAccelerator, vielleicht ist dort auch was anders, besser...
27. Oktober 2009 um 20:17
Halb offtopic
Frank, hast du schonmal W3 Total Cache getestet?
27. Oktober 2009 um 21:48
MArc: ja, das Plugin ist aus meiner Sicht eines der besten Plugins, die einen Cache via Plugin anbieten.
27. Oktober 2009 um 21:58
....ich habe es gerade auf einem Testblog im Einsatz.
Ist es denn sinvoll, dann noch zusätzlich diesen EA-Cache zu nutzen?
28. Oktober 2009 um 09:27
@Marc: das sind zwei paar Schuhe, den eA steuert man via RAM und damit kann schon mehr raus geholt werden. Die Plugin-Lösung ist eher dafür, wenn man den Server nicht gut kennt und man sich rein aus WP um das Thema kümmern möchte.
28. Oktober 2009 um 15:21
Bei W3 Total gefällt mir aktuell der Cache der DB-Queries via Memcached-Daemon... Das drückt die Queries richtig in den Keller.
Den Object-Cache via eA habe ich einfach auch mal dringelassen... keine Ahnung, ob die sich in die Quere kommen. Für den Moment sieht es aber gut aus!
Oh, und diese memcache-php-extension ist ja auch Ram und nicht Disk?!
28. Oktober 2009 um 16:02
@Marc: ja, aber muss Memcache dann nicht auf dem Server vorliegen; bei diversen Hostern geht immer nur eines APC; eA oder Memcache.
28. Oktober 2009 um 20:06
Ok, das stimmt natürlich...
Ich bin ein Spielkind mit Server, ich installiere was ich will
28. Oktober 2009 um 20:14
Dann wäre ein Vergleich zw. APC und eAccelerator natürlich toll
2. November 2009 um 00:12
Aktuell fahre ich wieder nur EA als object-cache, aber in einer verbesserten (?) Verison.
Zumindest wenn man der Beschreibung glauben soll, lach...
Vielleicht auch für dich mal einen Blick wert?