eAccelerator für WordPress

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.

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 7 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

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 - https://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:&nbsp;&nbsp;</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
?>

Comments are closed.