<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>bueltge.de [by:ltge.de] &#187; Performance</title>
	<atom:link href="http://bueltge.de/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://bueltge.de</link>
	<description>Frank Bültge schreibt auf bueltge.de zu den Themen Webentwicklung &#38; design, WordPress, Literatur und andere Themen bezüglich Internet und Development</description>
	<lastBuildDate>Tue, 22 May 2012 20:02:25 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Überdenke die Verwendung von Code Snippets!</title>
		<link>http://bueltge.de/ueberdenke-verwendung-code-snippets/1270/</link>
		<comments>http://bueltge.de/ueberdenke-verwendung-code-snippets/1270/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 11:29:55 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1270</guid>
		<description><![CDATA[ich möchte zum Nachdenken oder einer Diskussion anregen: die Kultur der Snippets und ihre Verwendung. Mein Standpunkt soll als Start in die Überlegung dienen und hat keine Bestrebung in Richtung Vollständigkeit und zu Ende gedacht.]]></description>
			<content:encoded><![CDATA[<p>Mein Blog ist sicher eines der vielen Sites im Netz, das in einer gewissen Form <abbr title="Programmschnipsel, kleines Programm">Code-Snippets</abbr> veröffentlicht &#8211; davon gibt es zu Hauf, egal ob eigene Ideen oder Copy/Paste Version. Aber darüber möchte ich hier keine Worte verlieren - ich möchte zum Nachdenken oder einer Diskussion anregen: die Kultur der Snippets und ihre Verwendung. Mein Standpunkt soll als Start in die Überlegung dienen und hat keine Bestrebung in Richtung Vollständigkeit und zu Ende gedacht.<br />
Mit ist klar, dass meine Meinung eben nur meine Sicht ist und aktuell habe ich dazu keine Diskussion im engeren Kreis geführt; kenne aber die Arbeit im Alltag mit den Freunden, Kollegen und nahe stehenden Entwicklern im WordPress Umfeld.</p>
<p>Mein Standpunkt wird sicher sehr WordPress getrieben sein, da ich mich sehr stark in diesem Umfeld bewege und man verzeihe mir die Einschränkung. Aber so spreche ich sicher einen Großteil der Leser meines Blogs an und kann eventuell ein Nachdenke oder gar Umdenken erreichen. Insbesondere ziele ich auf die Anwender ab, die meinen, dass wenn Sie sämtliche Funktionen irgendwo unüberlegt kopieren und in die <code>functions.php</code> des WordPress Themes ziehen, dass Sie eine besonderes tolle Lösung haben. Ein Schnipsel, ein Snippet ist mehr als die Lösung zum Verwenden, es ist die Basis um eine Ziel schneller zu erreichen &#8211; es ist nicht die fertige Lösung für die jeweilige Anforderung.</p>
<p><img src="http://bueltge.de/wp-content/images/snippets-verwendung.jpg" alt="Snippets überdenken" width="600" height="400" /></p>
<p><span id="more-1270"></span><br />
Jeder der viel zeit mit Code verbringt und Lösungen erstellt, insbesondere wenn er dass mehr oder weniger allein tun, schmort im eigenen Saft, eignet sich Eigenarten an und wiederholt Fehler und Denkweisen. Die alltägliche Arbeit kann durch die Nutzung von Schnipseln erleichtern werden - führen sie doch oft zu der gesuchten Lösung und können entweder das Endergebnis sein oder ein Teil eines entstehenden Etwas. Dabei geht vermutlich jeder Entwickler etwas anders vor. Während dem einen die Variante des Schnipsels genügt und er via Copy/Paste die Lösung übernimmt, überdenkt der Andere die Lösung, lernt daraus, verbessert sie oder kommt damit zu einer Lösung im Sinne seiner Anforderung.</p>
<p>Gerade letzteres ist meine Grundidee beim Bereitstellen von Snippets - ich löse diverse Probleme wöchentlich und mehr, trotz der bisher noch immer nebenberuflichen Tätigkeit im Webumfeld. Die Freunde müssen dabei fast täglich ran und eine Lösung finden. Die bereitgestellten Lösungen sollen zum Nachdenken anregen und zur Lösungsfindung beitragen. Je besser man das eigene System kennt, je besser kann man die Anforderungen im Hinblick auf eine gesamtheitliche Lösung für das Basissystem und das Ziel umsetzen. Das pure Copy/Paste-Verhalten sorgt meines Erachtens für Stillstand und unüberlegtes Handeln. Ohne eine Überlegung dazu wird die vorgestellte Lösung implementiert. Insofern versuche ich auch jedes Snippet mit etwas Erläuterung anzureichern und für Verständnis zu sorgen: Warum habe ich so gehandelt? Warum diese Lösung? Man soll sich selbst zum Lernen und dem Verständnis zwingen und so den eigenen Horizont erweitern.</p>
<p>Dabei ist mir ein Austausch sehr wichtig, darum auch öffentlich. Mir ist klar, dass meine Lösung nur im Rahmen meiner Möglichkeiten entstehen kann. Ich bin im Hinblick auf das Web, WordPress und das Programmieren ein Autodidakt, habe nie eine Unterrichtsstunde zu diesen Themen besucht, es sei denn als Unterrichtender. Das Lernen kam immer aus eigenem Antrieb und der Kritik und dem Austausch mit Freunden und Lesern. Das Blog ist sicher eine wunderbare Quelle für den nachweis meines Lernens und gerade meine Plugins für WordPress spiegeln dies wieder; würde ich viele Sachen heute nicht mehr so schreiben, wie noch in den ersten Plugins. Die Lernkurve ist hoffentlich ersichtlich und gerade die vielen Eindrücke, Erfahrungen und Diskussionen machen meine Idee, so glaube ich, im Kundenumfeld so gefragt. Die Erfahrung macht am Ende einen Großteil der Lösung aus.</p>
<p><img class="alignleftob" src="http://bueltge.de/wp-plugin-sicherheit/pix/03.gif" alt="Codebasteleien" width="300" height="257" /><br />
Code-Schnipsel sind in vielen Blogs zu diversen Themen abgelegt, immer im Hinblick auf den aktuellen Wissenstand und die Zielsetzung des Autors. Darum gehören sie überdacht und auf Gültigkeit geprüft. Sei es um dem eigenen Codingstandard recht zu werden, das explizite Ziel der Anforderung zu erreichen oder eine bessere Lösung zu erstellen.<br />
Ich will Snippets nicht verteufeln, ganz im Gegenteil - teilt eure Ideen und Lösungen, diskutiert sie und seit offen für Verbesserungen! Nur so kann man aus meiner Sicht und Erfahrung zu besseren Lösungen kommen. Fehler sind menschlich - sie sind Teil von uns und wer keine Fehler macht, dem sind einfach die Aufgaben zu gering und die Herausforderung fehlt.</p>
<p>Ich möchte die Leser anregen über das pure Copy/Paste-Verhalten nachzudenken, eventuell umzudenken und beim Veröffentlichen von Schnipseln hier und da einige Worte dazu hinterlegen, so dass der Leser eine Möglichkeit hat, die Lösung zu verstehen und aktiv zu nutzen. Die ständige Verwendung von Schnipseln ohne den geist zerstören die Qualität der Lösung, sorgen für Unsicherheit -, stören die Stabilität im System und machen das Finden von Fehlern schwer. </p>
<p>Im Hinblick auf WordPress und dessen Plugin-API gibt es hier weit mehr auszuholen, aber dann wird es viel und liest das noch jemand? Überdenke gerade im Hinblick auf WordPress die Copy/Paste-Kultur von Snippets, trenne sauber zwischen den Funktionen für das Theme und als Erweiterung für das Gesamtsystem mittels eines Plugins. <a href="http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/" title="den Beitrag WordPress: Ein Plugin ist ein Plugin bei Thomas lesen">Thomas</a> hat dazu gerade ein <a href="http://toscho.de/2011/wordpress-ein-plugin-ist-ein-plugin/" title="den Beitrag WordPress: Ein Plugin ist ein Plugin bei Thomas lesen">wenig ausgeholt</a> und die Zahl der Plugins in einer WordPress Installation ist keine Aussage zur Qualität! Die Performance des Blogs hängt nicht von der Anzahl der Plugins ab, da gehört weit mehr dazu. Insbesondere die Fehlersuche kann mit Plugins vereinfacht werden, da man über die Oberfläche oder via FTP recht einfach deaktivieren kann - insofern man die einzelnen Funktionen sauber trennt. </p>
<p>Also - auf eine neues im Denken zu Snippets und dessen Verwendung im täglichen Arbeiten im Web oder auch nur im Hobby. Gerade die Applikation und die Arbeit damit wird es danken, der Kunde ebenso.<br />
<cite>Bildquelle: <a href="http://radiopuzzle.de/" title="Puzzle im Kopf">Puzzle im Kopf</a></cite></p>
<h4>Hinweis Session zum WordCamp Schweiz</h4>
<p>Philip Hetjens wird zu diesem Thema die Session <a href="http://wordcamp-switzerland.ch/148/session-ein-rant-uber-snippets/">Ein Rant über Snippets</a> auf dem WordCamp am 7. Mai 2011 in der Schweiz halten. Sicher ein schönes Thema zum Diskutieren und Einsichten gewinnen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/ueberdenke-verwendung-code-snippets/1270/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/ueberdenke-verwendung-code-snippets/1270/feed/</wfw:commentRss>
		<slash:comments>68</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/snippets-verwendung.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/snippets-verwendung.jpg" medium="image">
			<media:title type="html">Snippets überdenken</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-plugin-sicherheit/pix/03.gif" medium="image">
			<media:title type="html">Codebasteleien</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Cachen mit der WordPress Transient API</title>
		<link>http://bueltge.de/cachen-wordpress-transient-api/1198/</link>
		<comments>http://bueltge.de/cachen-wordpress-transient-api/1198/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 10:19:19 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1198</guid>
		<description><![CDATA[Die Transient API von WordPress bietet eine Liste von Funktionen, die das Cachen von Daten in der Datenbank vereinfacht. Dies kann man via Plugin nutzen, aber auch im Frontend-Bereich kann diese Lösung nützlich sein. Ein kleines Beispiel soll dies verdeutlichen.]]></description>
			<content:encoded><![CDATA[<p>WordPress besitzt eine API die explizit zum zeitlich gesteuerten Speichern von Daten gedacht ist - die <a href="http://codex.wordpress.org/Transients_API">Transient API</a>. Diese API ist also für das Cachen von Daten in der Datenbank gedacht und recht einfach einzusetzen - dies sollte man auch tun. </p>
<p>Die Transient API ist nicht nur für Entwickler interessant, wie das folgende kleine Beispiel zeigt, welches die Daten der Tag-Wolke innerhalb der Datenbank speichert und so typischerweise im Theme Verwendung finden könnte.<br />
<span id="more-1198"></span><br />
Im ersten Schritt holen wir dazu den Eintrag aus der Datenbank, der als Inhalt für die Tag-Wolke dienen soll - <code>$tag_cloud = get_transient( 'tag_cloud' );</code>. Wenn dieser Eintrag fehlt schlägt, dann wird die Tag-Wolke normal über den Template Tag <code>wp_tag_cloud()</code> erzeugt. Einziger Unterschied gegenüber der "normalen" Verwendung im Template des Theme, die direkte Ausgabe ist auf <code>FALSE</code>, da wir sie in einer Variable benötigen.<br />
Im folgenden setzen wir nun den Eintrag in der Datenbank mit diesem Inhalt und geben einen Zeitwert mit: <code>set_transient($transient, $value, $expiration);</code>. Der Zeitwert, Parameter drei, wird in Sekunden angegeben.<br />
Nun muss lediglich der Wert der Variable ausgegeben werden und fertig; ab nun bekommt die Tag-Wolke ihrer Daten aus dem Cache, der für einen Zeitraum von 12 Stunden existiert und dann neu erstellt wird.</p>
<pre><code class="php">
$tag_cloud = get_transient( 'tag_cloud' );
if ( false === $tag_cloud || '' === $tag_cloud ){
	$args = array('echo' =&gt; false);
	$tag_cloud = wp_tag_cloud( $args );
	set_transient( 'tag_cloud', $tag_cloud, 60*60*12 );
}
echo $tag_cloud;
</code></pre>
<p>Das kleine Beispiel verdeutlicht hoffentlich die Möglichkeiten, die Transient API liefert einige weitere Funktionen, die im <a href="http://codex.wordpress.org/Transients_API">Codex</a> sehr schön nachzulesen sind.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/cachen-wordpress-transient-api/1198/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/cachen-wordpress-transient-api/1198/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Eigenes CDN in WordPress nutzen</title>
		<link>http://bueltge.de/eigenes-cdn-in-wordpress-nutzen/1205/</link>
		<comments>http://bueltge.de/eigenes-cdn-in-wordpress-nutzen/1205/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 23:48:50 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1205</guid>
		<description><![CDATA[CDNs klingen immer gleich nach hohen Kosten, aber Google und co. genügt im Grunde eine cookiefreie Domain und daher zeige ich eine einfache Lösung, wie man das "eigene CDN" einrichtet und mit WordPress nutzt.]]></description>
			<content:encoded><![CDATA[<p>In einem <a href="http://www.contao.org/blog-leser/items/contao-fuer-google-page-speed-optimieren.html">Artikel von Leo Flyer</a> ist mir ein altes Thema nochmals aufgefallen - CDN mit dem eigenen Webspace. Sämtliche Analysetools wie YSlow oder PageSpeed empfehlen das Nutzen eines oder mehrerer CDN. In Sachen Performance erst mal richtig - im weitesten Sinne muss das CDN aber kein kostenpflichtiges CDN bei anderen Dienstleistern sein, sondern der eigenen Webspace kann dazu dienen.<br />
Google fordert nicht direkt ein CDN, sondern lediglich eine Domain ohne Cookies. Dafür muss man lediglich eine oder mehrere Subdomain mit Webspace anlegen und alles weitere übergebe ich an WordPress.</p>
<blockquote><p>CDN - <strong>Content Delivery Network</strong>, ist ein Netz lokal verteilter und über das Internet verbundener Server, mit dem Inhalte (insbesondere große Mediendateien) ausgeliefert werden. In der Regel sind diese Server sehr leistungsfähig und schnell. Sie konzentrieren sich auf die Ausgabe der Dateien und keine anderen Funktionen wie Cookies.</p></blockquote>
<p><span id="more-1205"></span><br />
Weitere Informationen zum Thema CDN gibt es beispielsweise bei <a href="http://de.wikipedia.org/wiki/Content_Distribution_Network">Wikipedia</a> oder bei <a href="http://playground.ebiene.de/2351/google-app-engine-als-cdn/">Sergej Müller</a>.<br />
Im Webspace meiner Domain habe ich drei Subdomains angelegt, die ich jeweils so eingestellt habe, dass sie auf Bilder, das Theme und Plugins verweisen.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/cdn-bueltge.png" alt="Subdomains" /></p>
<p>Im ersten Test sollte dies reichen. Insbesondere für Bilder und die Dateien des Theme ist das sicher nützlich, da die so gut wie statische Elemente sind. Für Bilder, die in erster Linie im Content der Artikel zu finden sind, habe ich eine Funktion laufen, die über den Hook <code>the_content</code> von WordPress die URLs im Artikel filtert und mit der Subdomain ersetzt.</p>
<pre><code class="php">
// replace content for CDN 
if ( !function_exists('fb_add_static_content_url') ) {
	function fb_add_static_content_url($content) {
			if ( is_admin() ) // eigentlich überflüssig
				return $content;
			
			$wpurl = get_bloginfo('wpurl');
			
			$search = array(
				$wpurl . '/wp-content/images/',
				$wpurl . '/wp-content/download/',
			);
			
			$replace = array(
				'http://cdn1.bueltge.de/',
				'http://cdn2.bueltge.de/',
			);
			
			return str_replace( $search, $replace, $content );
	}
	add_filter( 'the_content', 'fb_add_static_content_url' );
}
</code></pre>
<p>Im weiteren kommt eine Funktion ins Spiel, die die Template Tags für die Adressen des Themes anpasst und auf die Subdomain verweist. Dies setzt voraus, dass die Dateien auch mit Hilfe der Template Tags von WordPress inkludiert wurden - zum Beispiel das Stylesheet über <code>&lt;link rel="stylesheet" href="&lt;?php bloginfo('stylesheet_url'); ?&gt;" type="text/css" media="screen" /&gt;</code>.</p>
<pre><code class="php">
// replace for CDN 
if ( !function_exists('fb_add_static_wpurl') ) {
	function fb_add_static_wpurl($info, $show) {
		
		if ( is_admin() )
			return $info;
		
		$keys = array(
			'url',
			'wpurl',
			'stylesheet_url',
			'stylesheet_directory',
			'template_url',
			'template_directory',
			);
		
		if ( in_array( $show, $keys ) ) {
			
			$wpurl = get_bloginfo('wpurl');
			
			$search = array(
				$wpurl . '/wp-content/images/',
				$wpurl . '/wp-content/download/',
				$wpurl . '/wp-content/themes/',
				$wpurl . '/wp-content/plugins/',
			);
			
			$replace = array(
				'http://cdn1.bueltge.de/',
				'http://cdn2.bueltge.de/',
				'http://cdn3.bueltge.de/',
				'http://cdn4.bueltge.de/',
			);
			
			return str_replace( $search, $replace, $info );
		
		} else {
			return $info;
		}
	}
	add_filter( 'bloginfo_url', 'fb_add_static_wpurl', 9999, 2 );
}
</code></pre>
<p>Um alle relevanten Möglichkeiten von <code>bloginfo()</code> zu erreichen, muss man weitere Hooks ansprechen - hier habe ich erst nichts gefunden und eine Frage in der <a href="http://lists.automattic.com/pipermail/wp-hackers/2010-August/033872.html">wp-hackers-Gemeinde</a> fand Aufschluss. Die folgende Funktion kümmert sich daher um drei Schlüssel der Funktion und sorgt für das Ersetzen mit der Subdomain.</p>
<pre><code>
function fb_add_static_stylesheet_uri($uri) {
			
			if ( is_admin() )
				return $uri;

			$wpurl = get_bloginfo('wpurl');

			$search = array(
				$wpurl . '/wp-content/images/',
				$wpurl . '/wp-content/download/',
				$wpurl . '/wp-content/themes/',
				$wpurl . '/wp-content/plugins/',
			);

			$replace = array(
				'http://cdn1.bueltge.de/',
				'http://cdn2.bueltge.de/',
				'http://cdn3.bueltge.de/',
				'http://cdn4.bueltge.de/',
			);
			return str_replace( $search, $replace, $uri );

}
add_filter ( 'template_directory_uri', 'fb_add_static_stylesheet_uri' );
add_filter ( 'stylesheet_uri', 'fb_add_static_stylesheet_uri' );
add_filter ( 'stylesheet_directory_uri', 'fb_add_static_stylesheet_uri' );
</code></pre>
<p>Mit diesen drei kleinen Funktionen muss man in den Artikeln oder den Theme von WordPress nichts tun, man kann einfach die Funktionen in ein Plugin oder die <code>functions.php</code> des Themes legen. Natürlich müssen die Subdomains angelegt und richtig konfiguriert sein.<br />
Nun gilt es noch, dafür zu sorgen, dass die Cookies auf die Subdomains nicht vererbt werden. Dies kann man innerhalb der wp-config.php der WordPress Installation hinterlegen, da WP dafür eine Konstante hat.</p>
<pre><code class="php">
define( 'COOKIE_DOMAIN', 'bueltge.de' );
</code></pre>
<p>Eventuell aufpassen, je nach dem wie man die URL konfiguriert hat - entweder mit oder ohne <em>www</em>.</p>
<p>Zusätzlich empfiehlt sich ein Eintrag in der <code>.htaccess</code> der Installation um doppelten Content zu verhindern.</p>
<pre><code class="apache">
##
# Explicitly send a 404 header if a file on cdn[0-9].example.org is not
# found. This will prevent the start page (empty URL) from being loaded.
##
RewriteCond %{HTTP_HOST} ^cdn[0-9]\.example\.org [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* - [R=404,L]


##
# Do not dispatch dynamic resources via cdn[0-9].example.org.
##
RewriteCond %{HTTP_HOST} ^cdn[0-9]\.example\.org [NC]
RewriteCond %{REQUEST_FILENAME} \.(php|html)$
RewriteRule .* - [R=404,L]
</code></pre>
<p>Zusätzliche Information zu dem Eintrag entnehmt bitte dem <a href="http://www.contao.org/blog-leser/items/contao-fuer-google-page-speed-optimieren.html">Artikel von Leo zu Contao Optimierung</a>.</p>
<p>Viel Spaß beim ausprobieren, beim Testen und auswerten. Neue Ideen, Erweiterungen und Verbesserungen können wie immer von euch in den Kommentaren hinterlassen werden  - ich freue mich darauf.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/eigenes-cdn-in-wordpress-nutzen/1205/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/eigenes-cdn-in-wordpress-nutzen/1205/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/cdn-bueltge.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/cdn-bueltge.png" medium="image">
			<media:title type="html">Subdomains</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Traffic-Einblicke bei bueltge.de</title>
		<link>http://bueltge.de/traffic-einblicke-bei-bueltge-de/1167/</link>
		<comments>http://bueltge.de/traffic-einblicke-bei-bueltge-de/1167/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 10:13:21 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[Linktipp]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Statistik]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1167</guid>
		<description><![CDATA[Scheinbar ist man an Zahlen meines Blogs interessiert und immer wieder gibt es Fragen, mit welcher Technik ich arbeite. Ich bin kein Freak im Hinblick auf die Zahlen, habe nur wenige Vergleichszahlen und diese schwanken enorm. Insofern zeige ich mal die Werte des Monats März 2010 und ihr könnt ich selber einen Überblick verschaffen. Einige Punkt zur Technik werde ich gern im Anschluss verlieren.]]></description>
			<content:encoded><![CDATA[<p>Scheinbar ist man an Zahlen meines Blogs interessiert und immer wieder gibt es Fragen, mit welcher Technik ich arbeite. Ich bin kein Freak im Hinblick auf die Zahlen, habe nur wenige Vergleichszahlen und diese schwanken enorm. Insofern zeige ich mal die Werte des Monats März 2010 und ihr könnt ich selber einen Überblick verschaffen. Einige Punkt zur Technik werde ich gern im Anschluss verlieren.<br />
<span id="more-1167"></span><br />
Ich interessiere mich nicht sonderlich für Statistiken, fälsche auch keine und so glaube ich auch nur wenigen Auswertungen. Ich habe seit August 2009 <a href="http://www.haveamint.com/">Mint</a> als Statistik-Tool im Zugriff, weil ich mit <a href="http://piwik.org/">Piwik</a> - das kam vorher zum Einsatz - unzufrieden war. Liegt nicht an der Aufbereitung der Inhalte und der Entwicklung, sondern einfach daran, dass Piwik mit meinem Traffic Probleme hat und daher immer wieder unzuverlässig ist. Für externe Dienste bin ich nur schwer zu begeistern und so kam nach einigen Fragen bei Freunden das Tool Mint ins Haus. Der zweite und dritte Screenshot ist auch direkt von dort und es sollen nur zwei Bereiche aufgezeigt werden, für dich sich via Mail in der Regel am meisten interessiert wird.</p>
<h4>Hits &#038; Traffic</h4>
<p>Im ersten Screenshot seht ihr die Zahlen, die die <strong>Serverstatisik des Hosters</strong> ausspuckt.<br />
<img class="centered" src="http://bueltge.de/wp-content/images/traffic/traffic.png" alt="Traffic bei bueltge.de" /><br />
Ich meine, dass &asymp;4,4Millionen Hits pro Monat für ein One Man Show ganz gut sind; <a href="http://bueltge.de/probleme-fassen/965/">Probleme</a> hatte ich ja schon ausreichend und daher musste ich ja, da ich nicht den Provider wechseln wollte, auf einen eigenen Server wechseln. Dank <a href="http://wpseo.de/">Sergej von wpSEO</a> wird dieser auch ohne eigenes Zutun finanziert und so sind die Unkosten gleich null für mich persönlich - alternativ hatte ich überlegt, dass Blog anders zu fahren, da mir der Kostenaufwand für ein Freizeitprojekt recht hoch erschien.</p>
<h4>Besucherzahlen</h4>
<p>Der folgenden Screenshot zeigt euch die Monatsstatistik, die seit dem Einsatz von Mint gesammelt wurden. ich habe mal beispielhaft die Werte des <strong>Monats März</strong> hinzugefügt.<br />
<img class="centered" src="http://bueltge.de/wp-content/images/traffic/besucherzahlen.png" alt="Besucherzahlen bei bueltge.de" /></p>
<h4>Populäre Seiten</h4>
<p>Woher kommen die Leute und was wollen Sie - einen kleinen Einblick schafft der Blick auf den folgenden Screenshot. Hier ist nicht zu sehen, dass das Feed meines Blogs immer die Nummer 1 ist, dort kommen im Schnitt &asymp;250.000 Anfragen und 130.000 Besucher rein. Bei meinem Blog sind ganz klar die Feedleser die Masse; der Feed war es auch, der mir damals die meisten Probleme generierte. Die <strong>250.000 Anfragen</strong> auf dem Feed sorgen für eine Last von <strong>14.423.036 kByte</strong>.<br />
<img class="centered" src="http://bueltge.de/wp-content/images/traffic/postpopular.png" alt="Populärste Seiten bei bueltge.de" /></p>
<h3>Hinter den Kulissen</h3>
<p>Das Blog läuft mir WordPress und auch sonst nutze ich keine Zaubertricks - setze auf klassische Methoden, die ich verstehe und kontrollieren kann. Ich bin der Meinung, dass Cache toll ist - aber man sollte wissen was man tut. Nicht selten befolgen Sites die Tipps aus dem Netz, verstehen aber nicht, was sie da tun und laufen dann in einem Problemfall in weitere Probleme rein. Blindes cachen bringt Ärger. Gerade im Umfeld von PHP und mySQL gibt es viele sehr unterschiedliche Methoden und wichtig ist mir, dass ich die Methode verstehe und möglichst keine Wissenschaft betreibe.</p>
<p>Zum Einsatz kommen möglichst nur Erweiterungen in WordPress, die ich selber schreibe, oder die ich geprüft habe. Dazu nutze ich den Editor und eigene Plugins von mir zur Analyse. Mir ist wichtig, dass die Last nicht durch Plugins enorm erhöht wird. Ebenfalls schaue ich genau auf die Last im Backend von WordPress, denn bei der wenigen Zeit die ich habe, will ich nicht noch auf Inhalte warten. Insofern beginnt eine Optimierung also bei der Installation, beim Theme und den Plugins, vor allem bei den Content-Filtern und ich nutze bewusst keine Widgets! Hier ist exakte, wissende und kontrollierte Arbeitsweise wichtig. Vieles an "Standard-caches" steuere ich via .htaccess; einen Einblick davon kann man sich in der <a href="http://code.google.com/p/wp-basis-theme/source/browse/trunk/basis/wp-root-tipps/.htaccess">Beispieldatei</a> vom <a href="http://wpbasis.de/">WP Basis Theme</a> im SVN machen.</p>
<p><strong>Am Rande:</strong> die größten Probleme machte mir in der Vergangenheit den Code, den ich in den Beiträgen darstelle, zu filtern. Der wurde via Filter maskiert und via Geshi formatiert - das war das aus ab einer gewissen Zugriffszahl. Aktuell arbeite ich mit einer eigenen Lösung und hinterlasse nur maskierten Code im Content, es läuft kein Filter mehr. Ich kenne kein Plugin für WordPress, was ich daher empfehlen kann, jeder Filter kann auf lange Sicht zu Problemen führen und das Blog ist abhängig vom Plugin, denn bei Deaktivierung wird der Code dann nicht selten interpretiert.</p>
<p>Im weiteren kommt nach Spielereien mit dem <a href="http://eaccelerator.net/">eAccelerator</a> der <a href="http://pecl.php.net/package/APC">APC</a> zum Einsatz. Hier habe ich keine handhabe, ich habe das Modul vom Hoster installieren lassen und kann nicht daran drehen. Aber innerhalb von WordPress habe ich eine Erweiterung laufen, die den Standard-Cache von WP mit dem APC nutzt und parallel läuft das Plugin <a href="http://www.w3-edge.com/wordpress-plugins/w3-total-cache/">W3 Total Cache</a> - dies ist aus meiner Sicht aktuell eines der Plugins, die man sich ansehen sollte, wenn man dahingehend Bedarf hat! Auch hier gilt, kontrolliert nutzen - nicht blind einschalten. Das Plugin hat sehr viele Funktionen, so dass man sehr schön gezielt schalten kann.<br />
Ich kenne die Meinungen zu dem Auslagern auf statische Seiten, zum Beispiel via Plugin Super Cache, verliere damit aber eine gewissen Freiheit und muss mich wesentlich mehr um das Cachen kümmern. Daher bevorzuge ich eher andere Themen. Ebenfalls kommt hier kein CDN zum Einsatz; in einem anderen Projekt mit viel Grafik war dies wirklich ein Schachzug und hat extreme Geschwindigkeit gebracht.</p>
<p><strong>Um es kurz zu machen:</strong> einige Einblicke in die Zahlen habe ich gebracht, gern zeige ich mehr, wenn man mag. Den technischen Aspekt möchte ich ungern klar darstellen, da aus meiner Sicht das Thema nicht schwarz &#038; weiß ist, sondern bedacht eingesetzt werden sollte und immer in Abhängigkeit der Anforderungen steht. Schreibe Reviews für Kunden, dann schaue ich mir jedes Detail an, gebe Empfehlungen und immer wieder gibt es Unterschiede. Nicht jeder hat unbegrenzte Möglichkeiten, nutzt Server Load Balancing für eine Verteilung der Last. Es gilt, mit bedacht und kontrolliert an der Performance drehen.</p>
<p><strong>Ein letzter Hinweis:</strong> wer mehr über die Optimierung bei sehr hohem Traffic wissen möchte, der sollte sich den <a href="http://twitter.com/fholzhauer/status/15198165020">Vortrag von Florian Holzhauer</a> ansehen. Er <a href="http://www.lawblog.de/index.php/archives/2010/06/01/blick-unter-die-haube-des-law-blog/">administriert das Lawblog</a> und dies hat &asymp;8Millionen Hits im Monat - ich bin also recht klein in der Blogwelt.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/traffic-einblicke-bei-bueltge-de/1167/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/traffic-einblicke-bei-bueltge-de/1167/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/traffic/traffic.png" />
		<media:content url="http://bueltge.de/wp-content/images/traffic/traffic.png" medium="image">
			<media:title type="html">Traffic bei bueltge.de</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/traffic/besucherzahlen.png" medium="image">
			<media:title type="html">Besucherzahlen bei bueltge.de</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/traffic/postpopular.png" medium="image">
			<media:title type="html">Populärste Seiten bei bueltge.de</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Quicktipp: oEmbed im Blog aktiv?</title>
		<link>http://bueltge.de/quicktipp-oembed-im-blog-aktiv/1098/</link>
		<comments>http://bueltge.de/quicktipp-oembed-im-blog-aktiv/1098/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 09:09:18 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Bild]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1098</guid>
		<description><![CDATA[Nicht immer benötigt man alle Funktionen, eine Funktion, die seit Version 2.9 von WordPress im Core ist, kann man einfach  abschalten und so Ressourcen sparen, wenn man diese Funktion nicht benötigt.]]></description>
			<content:encoded><![CDATA[<p>Seit der Version 2.9 von WordPress wird das <a href="http://www.oembed.com/">oEmbed-Format</a> seitens WordPress unterstützt und damit lassen sich externe Inhalte recht einfach in den Beiträgen einbetten. Lediglich die Url eines Bildes von Flickr oder eines Videos von YouTube genügt und im Frontend wird das jeweilige Medienfile eingebettet. Damit wird das einbinden von Medien wesentlich vereinfacht. Wer trotzdem noch Schwierigkeiten hat, dem sei der Artikel <a href="http://www.blogtrainer.de/2010/02/03/youtube-videos-flickr-fotos-einbetten">Youtube-Videos und Flickr-Fotos noch einfacher einbetten</a> empfohlen.</p>
<p>Um diese Funktion zu ermöglichen muss in den Einstellungen des Blog ein Haken gesetzt sein, der im Standard nach dem Update oder der Installation von WordPress aktiv ist. Damit das ganze dann funktioniert, sucht WordPress den Content ab und ersetzt die Url mit der jeweiligen Datei und dem entsprechenden Markup - das kostet Last, denn der Filter benötigt ein wenig an Ressourcen um immer alle Daten zu durchforsten.<br />
<span id="more-1098"></span></p>
<pre><code class="php">
// Attempts to embed all URLs in a post
if ( get_option('embed_autourls') )
	add_filter( 'the_content', array(&amp;$this, 'autoembed'), 8 );
</code></pre>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/autoembed.png" alt="oembed deaktivieren" /></p>
<p>Daher, wer diese Funktion nicht benötigt, einfach den Haken entfernen und schon wird eine Ressource frei gegeben.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/quicktipp-oembed-im-blog-aktiv/1098/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/quicktipp-oembed-im-blog-aktiv/1098/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/autoembed.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/autoembed.png" medium="image">
			<media:title type="html">oembed deaktivieren</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Stylesheet laden, wenn die WordPress Galerie im Beitrag ist</title>
		<link>http://bueltge.de/stylesheet-laden-wenn-wordpress-galerie-beitrag/1090/</link>
		<comments>http://bueltge.de/stylesheet-laden-wenn-wordpress-galerie-beitrag/1090/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 00:06:37 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Linktipp]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[StyleSheet]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1090</guid>
		<description><![CDATA[Im Bezug auf die bessere Gallery ist es eigentlich nicht nötig das Stylesheet zu laden, wenn es keine Gallery gibt, insofern ist es also lohnend, wenn man im Vorfeld prüft, ob die Gallery im Beitrag genutzt wird und nur dann das Stylesheet laden. Dazu muss man die Beitrag parsen und das kann man auf zwei Arten tun.]]></description>
			<content:encoded><![CDATA[<p>Im Bezug auf die <a href="http://dynamicinternet.eu/blog/2009-11-06/eine-loesung-fuer-die-wordpress-galerie/">bessere Gallery</a> ist es eigentlich nicht nötig das Stylesheet zu laden, wenn es keine Galerie gibt, insofern ist es also lohnend, wenn man im Vorfeld prüft, ob die Gallery im Beitrag genutzt wird und nur dann das Stylesheet laden. Dazu muss man die Beitrag parsen und das kann man auf zwei Arten tun.<br />
<span id="more-1090"></span><br />
Die klassische Lösung ist den Content in der Ausgabe zu parsen und den Shortcode zu suchen, klassisches PHP <a href="http://de2.php.net/manual/de/function.strstr.php"><code>strstr</code></a>. Je nach Ergebnis wird das Stylesheet geladen.<br />
<code>if ( strstr($post-&gt;post_content, '[gallery') )</code>.<br />
Dies kostet natürlich Zeit und Performance, was man eigentlich meiden möchte. Insofern ist es besser, wenn man den Beitrag im Vorfeld parsen kann. In diesem Zusammenhang gibt es einen <a href="http://wordpress.org/support/topic/350167#post-1344676">Tread im Forum von WordPress</a>, welches genau dazu eine erstklassige Lösung von <a href="http://w-shadow.com/">WhiteShadow</a> hat und diesen Ansatz kann man natürlich auch für das Laden des Stylesheet nutzen, wenn es um die Gallery geht.</p>
<pre><code class="php">
// onyl css, when post has a gallery
function gallery_stylesheet($posts) {
	if ( empty($posts) )
		return $posts;

	$found = false;

	foreach ($posts as $post) {
		if ( stripos($post-&gt;post_content, '[gallery') )
			$found = true;
			break;
		}

	if ($found)
		wp_enqueue_style( 'gallery-stylesheet', get_bloginfo('stylesheet_directory') . '/gallery.css', false, false, 'screen' );

	return $posts;
}
add_action('the_posts', 'gallery_stylesheet');
</code></pre>
<p>Diesen Ansatz kann man natürlich auch nutzen für das Laden von Scripten,</p>
<pre><code class="php">
// onyl js, when post has a gallery
function my_script($posts) {
	if ( empty($posts) )
		return $posts;

	$found = false;

	foreach ($posts as $post) {
		if ( stripos($post-&gt;post_content, '[gallery') )
			$found = true;
			break;
		}

	if ($found)
		wp_enqueue_script( 'my-script', get_bloginfo('stylesheet_directory') . '/script.js', false, false, true );

	return $posts;
}
add_action('the_posts', 'my_script');
</code></pre>
<p>Weitere Hinweise zum Einbinden von JavaScript- und CSS-Dateien gibt es <a href="http://bueltge.de/javascript-bibliotheken-in-und-aus-wordpress-nutzen/808/">in einem anderen Beitrag</a> zum Thema.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/stylesheet-laden-wenn-wordpress-galerie-beitrag/1090/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/stylesheet-laden-wenn-wordpress-galerie-beitrag/1090/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Contactable - Kontaktformular in WordPress</title>
		<link>http://bueltge.de/kontaktformular-wordpress-contactable/1072/</link>
		<comments>http://bueltge.de/kontaktformular-wordpress-contactable/1072/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 07:41:43 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1072</guid>
		<description><![CDATA[Die Integration eines Kontaktformulars mit WordPress beginnt meist bei einer Pluginsuche und endet oft mit einem viel zu großem Aufwand. Da werden Scripte geladen, Filter von WordPress über alle Seiten und Beiträge gejagt - nur um auf einer Seite ein Formular zu integrieren. Das Blog ist immer so gut wie sein Techniker und ich möchte heute mal einen ganz einfachen Weg zeigen, wie man sich ohne große Kenntnisse trotzdem ein Kontakt-Formular in das eigene Blog integriert.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" alt="WP Adventskalender 22" /><br />
Die Integration eines Kontaktformulars mit WordPress beginnt meist bei einer Pluginsuche und endet oft mit einem viel zu großem Aufwand. Da werden Scripte geladen, Filter von WordPress über alle Seiten und Beiträge gejagt - nur um auf einer Seite ein Formular zu integrieren. Das Blog ist immer so gut wie sein Techniker und ich möchte heute mal einen ganz einfachen Weg zeigen, wie man sich ohne große Kenntnisse trotzdem ein Kontakt-Formular in das eigene Blog integriert.<br />
<span id="more-1072"></span><br />
Die Lösung ist nicht der Weisheit letzter Schuss, aber sie zeigt, wie einfach es ist und wie ressourcenschonend für WordPress die Integration sein kann.<br />
Damit wir uns voll und ganz der Integration widmen können, und uns nicht mit PHP und JavaScript im Sinne des Formulars beschäftigen müssen, nutze ich hier im Beispiel das tolle Formular-Plugin<br />
<a href="http://theodin.co.uk/blog/ajax/contactable-jquery-plugin.html"><strong>Contactable</strong></a> für jQuery von Philip Beel. Das Plugin bringt alle erforderlichen Dateien mit und muss lediglich integriert werden - sehr einfach zu nutzen und wenn man mag an die eigenen Bedürfnisse anzupassen. Hinweise dazu gibt es auf der <a href="http://theodin.co.uk/blog/ajax/contactable-jquery-plugin.html">Site zum jQuery-Plugin</a>. Die Integration des Formulars zeige ich anhand des Standard-Themes Kubrick von WordPress, ist aber in jedem anderen Theme eben so zu nutzen. <strong>Aber Achtung</strong>, Spamer könnten das Plugin missbrauchen, daher gut überlegen oder erweitern - mehr dazu gibt es hier in den <a href="http://http://bueltge.de/kontaktformular-wordpress-contactable/1072/#comment-350200">Kommentaren</a> zu lesen. Danke in diesem Hinblick an Robert für die Hinweise und die damit verbundene Mühe.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/contactable.png" alt="Contactable im Kubrick" /></p>
<p>WordPress bringt im Standard die jQuery Bibliothek mit und so müssen wir uns um die nicht kümmern, sondern nutzen sie lediglich. Dabei findet der Aufruf aller nötigen Dateien und Scripte innerhalb des Templates statt, welches sich im Anschluss um die Ausgabe des Kontaktformulars kümmert. Dieses Aufruf erledigen wir mit den Funktionen von WordPress - so gehen wir sicher, dass die Dateien wirklich nur einmal geladen werden. WordPress kümmert sich um die richtige Reihenfolge und um die Abhängigkeiten. Zu diesem Thema habe ich bereits einiges an <a href="http://bueltge.de/javascript-bibliotheken-in-und-aus-wordpress-nutzen/808/">Infos hinterlegt und verweise auf diesen Beitrag</a>.</p>
<p>Als erstes erstellen wir ein Template, ich nenne es <code>contact-page.php</code> und es muss im Ordner eures Themes abgelegt werden. Dies enthält den Aufruf der nötigen Scripte und der dazugehörigen Stylesheets. Im Grunde benötigt ihr nur diese vier Aufrufe in der <code>page.php</code> eures Theme abzulegen, einen neuen Namen für die Datei zu vergeben und den Kommentar zum Erkennen durch WordPress im Page-Bereich des Backend abzulegen (ganz am Anfang der Datei). Im folgenden die Syntax am Beispiel der <code>page.php</code> aus dem Standard-Theme Kubrick.</p>
<pre><code>
&lt;?php
/**
 * Template Name: Contact Page
 *
 * @package WordPress
 * @subpackage Default_Theme
 */

wp_enqueue_script( 'jquery.contactable', get_bloginfo('template_directory') . '/contactable/jquery.contactable.js', array('jquery') , 3.1, true );
wp_enqueue_script( 'jquery.validate', get_bloginfo('template_directory') . '/contactable/jquery.validate.pack.js', array('jquery') , 3.1, true );
wp_enqueue_script( 'my_contactable', get_bloginfo('template_directory') . '/contactable/my_contactable.js', array('jquery') , 3.1, true );
wp_enqueue_style( 'contactable', get_bloginfo('template_directory') . '/contactable/contactable.css' );

get_header(); ?&gt;

	&lt;div id=&quot;content&quot; class=&quot;narrowcolumn&quot; role=&quot;main&quot;&gt;

		&lt;div class=&quot;post&quot; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;
		&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;

			&lt;div class=&quot;entry&quot;&gt;
				&lt;?php the_content('&lt;p class=&quot;serif&quot;&gt;Read the rest of this page &amp;raquo;&lt;/p&gt;'); ?&gt;
				
				&lt;div id=&quot;mycontactform&quot;&gt; &lt;/div&gt;
				
			&lt;/div&gt;
		&lt;/div&gt;
	
	&lt;/div&gt;

&lt;?php get_sidebar(); ?&gt;

&lt;?php get_footer(); ?&gt;
</code></pre>
<p>Wie in der Syntax zu erkennen, habe ich alle Dateien des jQuery-Formular-Plugnis im Ordner <code>contactable</code> im Ordner des Themes abgelegt. Eventuell müssen daher eure Pfade angepasst werden. Aktuell sieht es in meinem Theme wie folgt aus:</p>
<ul>
<li>
default</p>
<ul>
<li>contactable
<ul>
<li>jquery.contactable.js</li>
<li>jquery.validate.pack.jss</li>
<li>my.contactable.js</li>
<li>contactable.css</li>
</ul>
</li>
<li>style.css</li>
<li>contact-page.php</li>
<li>...</li>
</ul>
</li>
</ul>
<p>Einzig die Datei <code>my.contactable.js</code> habe ich hinzugefügt; diese kümmert sich um den Aufruf des Formulars und kann mit Parametern gefüllt werden. Inhaltlich sieht sie wie folgt aus:</p>
<pre><code>
jQuery(document).ready( function($){
	$('#mycontactform').contactable({
		name: 'Name',
		email: 'E-Mail',
		message : 'Nachricht',
		recipient: 'example@domain.com',
		subject: 'Kontaktformular',
		recievedMsg : 'Vielen Dank f&amp;uuml;r Ihre Nachricht.'
	});
});
</code></pre>
<p>Sind alle Dateien gespeichert und an eure Bedürfnisse angepasst, dann muss lediglich im Admin-Bereich von WordPress eine Seite angelegt werden. Dieser Seite gebt ihr einen Namen, eventuell Inhalt und ihr müsst das Template auswählen - in unserem Fall die <strong>Contact Page</strong>. Nachdem Speichern sollte die Seite im Frontend des Blog aufzurufen sein und mit einem Klick auf das kleine Label fährt das Formular in die Sicht und kann ausgefüllt werden.</p>
<p>Durch die Aufrufe mit Hilfe von WordPress Funktionen und den richtigen Parametern, sind nun die Scripte im Footer der Site integriert. Die Bibliothek jQuery muss nicht aufgerufen werden, sie wird von WordPress hinzugefügt, wenn sie noch nicht da ist, durch die Abhängigkeit der Parameter zum Schlüssel <code>jquery</code>. Durch die Nutzung eines Templates mit allen Aufrufen werden sämtliche Scripte und StyleSheets nur eingebunden, wenn diese Seite von WordPress aufgerufen wird. Wer das Formular-Schnippsel auf allen Seiten möchte, der macht den Aufruf bspw. in der <code>header.php</code> oder <code>functions.php</code>.</p>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/contactable-ocss.png" alt="Contactable im Kubrick" /></p>
<p>Möchte man diese Funktion nicht nutzen, so kann entweder dass CSS nicht genutzt werden, bzw. ein eigenes Design hinzugefügt werden oder man passt das JS an seine eigenen Bedürfnisse an. Gleiches gilt für zusätzliche Felder im Formular, dazu muss der Inhalt der Dateien angepasst werden.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/kontaktformular-wordpress-contactable/1072/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/kontaktformular-wordpress-contactable/1072/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-22.jpg" medium="image">
			<media:title type="html">WP Adventskalender 22</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/contactable.png" medium="image">
			<media:title type="html">Contactable im Kubrick</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/images/wp/contactable-ocss.png" medium="image">
			<media:title type="html">Contactable im Kubrick</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Update Prüfung für Themes entfernen</title>
		<link>http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/</link>
		<comments>http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 07:09:40 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1076</guid>
		<description><![CDATA[Ich hatte das Thema hier schon mehrfach - der Update-Check von WordPress ist nicht in jedem Fall sinnvoll und kann Last kosten, die man anders gebrauchen kann. Ich klemme je nach Anforderung den Cron ab und via Hook sorge ich dafür, dass das Update auf diverse Themen nicht mehr läuft.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-16.jpg" alt="WP Adventskalender 16" /><br />
Ich hatte das Thema hier schon mehrfach (und in <a href="http://bueltge.de/wordpress-crons-loeschen/1070/">Türchen Nr. 12</a>) - der Update-Check von WordPress ist nicht in jedem Fall sinnvoll und kann Last kosten, die man anders gebrauchen kann. Ich klemme je nach Anforderung den Cron ab und via Hook sorge ich dafür, dass das Update auf diverse Themen nicht mehr läuft.</p>
<p><a href="http://markjaquith.wordpress.com/2009/12/14/excluding-your-plugin-or-theme-from-update-checks/">Mark Jaquith</a> stellt zwei sehr schöne Lösungen vor, wie man in Plugins und Themes als Autor den Update-check abklemmt. Viele Blogs nutzen Themes, welche selbst geschrieben sind, oder welche kein Update erhalten können. Insofern ist vor allem die Lösung für die Themes sehr nützlich.<br />
<span id="more-1076"></span><br />
Sie ist schnell in die <code>functions.php</code> des jeweiligen Themes integriert und so muss man sich nicht mehr in den Einstellungen des Blog darum kümmern. Gerade im Hinblick auf Themes für Kunden, welche sicher kein automatisches Update bekommen, ist diese kleine Funktion ein Mehrwert und gehört daher in die Arbeit aufgenommen.</p>
<pre><code>
function cws_hidden_theme_12345( $r, $url ) {
	if ( false !== strpos( $url, 'http://api.wordpress.org/themes/update-check' ) )
		return $r; // Not a theme update request. Bail immediately.
	
	$themes = unserialize( $r['body']['themes'] );
	unset( $themes[ get_option( 'template' ) ] );
	unset( $themes[ get_option( 'stylesheet' ) ] );
	$r['body']['themes'] = serialize( $themes );
	return $r;
}

add_filter( 'http_request_args', 'cws_hidden_theme_12345', 5, 2 );
</code></pre>
<p><a href="http://markjaquith.wordpress.com/2009/12/14/excluding-your-plugin-or-theme-from-update-checks/">Mark stellt in seinem Beitrag</a> ebenso eine Lösung für Plugins vor, die ich ebenso sinnvoll finde; gerade bei Plugins für explizite Kundenwünsche finde ich das wichtig und so kommt man auch nicht in Kollision, wenn es ein Plugin im SVN gibt/entsteht, was den gleichen Namen trägt.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/update-pruefung-fuer-themes-entfernen/1076/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-16.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-16.jpg" medium="image">
			<media:title type="html">WP Adventskalender 16</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Crons löschen</title>
		<link>http://bueltge.de/wordpress-crons-loeschen/1070/</link>
		<comments>http://bueltge.de/wordpress-crons-loeschen/1070/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 08:09:30 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Adventskalender]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1070</guid>
		<description><![CDATA[Der eine oder andere benötigt nicht immer alle automatischen Abläufe von WordPress. So hat beispielsweise der Cron zum Prüfen des Update eines Themes dann keine Relevanz, wenn man ein eigen gestricktes Theme nutzt. In diesem Zusammenhang kann man daher die Ressource sicher frei geben und dies geht recht schnell.]]></description>
			<content:encoded><![CDATA[<p><img  class="alignright" src="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-12.jpg" alt="WP Adventskalender 12" /><br />
Der eine oder andere benötigt nicht immer alle automatischen Abläufe von WordPress. So hat beispielsweise der Cron zum Prüfen des Update eines Themes dann keine Relevanz, wenn man ein eigen gestricktes Theme nutzt. In diesem Zusammenhang kann man daher die Ressource sicher frei geben und dies geht recht schnell.<br />
<span id="more-1070"></span><br />
Zum einen hier der Hinweis auf das Plugin <a href="http://www.scompt.com/projects/wp-crontrol">WP-Crontrol</a>, mit dem man die Crons in WordPress sehr schöne einsehen und steuern kann. Ebenso der Hinweis auf einen <a href="http://playground.ebiene.de/2340/wordpress-cronjobs-bereinigen/">Artikel bei Sergej</a>, der das Plugin näher vorstellt.</p>
<p>Alternativ kann man den Cron direkt deaktivieren. Am Beispiel des Cron zum Prüfen für ein Update des Themes sieht das wie folgt aus.<br />
<code>wp_clear_scheduled_hook( 'wp_update_themes' );</code></p>
<p>Dies kann man auch für andere Cron-Schlüssel tun - <code>wp_update_plugins</code>, <code>wp_version_check</code>. Die Schlüssel findet man in der Datenbank, Tabelle <code>options</code>, Eintrag <code>cron</code>, oder übersichtlich mit dem oben genannten Plugin WP-Control. Die Syntax gehört in ein Plugin oder die <code>functions.php</code> des Themes. Wird der Code wieder entfernt, dann aktiviert WordPress den jeweiligen Cron wieder.</p>
<p>Diese Lösung sorgt dafür, dass die Crons nicht mehr laufen. Um die Funktionen für die Updates ebenfalls raus zu nehmen, verweise ich auf einen <a href="http://bueltge.de/wordpress-27-offline-nutzen/710/">älteren Beitrag zum Thema</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-crons-loeschen/1070/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-crons-loeschen/1070/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-12.jpg" />
		<media:content url="http://bueltge.de/wp-content/images/wp/christmas/wp-christmas-12.jpg" medium="image">
			<media:title type="html">WP Adventskalender 12</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>eAccelerator für WordPress</title>
		<link>http://bueltge.de/eaccelerator-fuer-wordpress/1018/</link>
		<comments>http://bueltge.de/eaccelerator-fuer-wordpress/1018/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 10:03:40 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=1018</guid>
		<description><![CDATA[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.]]></description>
			<content:encoded><![CDATA[<p>Der <a href="http://eaccelerator.net/">eAccelerator</a> 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 <a href="http://de2.php.net/manual/de/function.phpinfo.php">phpinfo</a> 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.<br />
<span id="more-1018"></span><br />
Um mit WordPress den eAccelerator zu nutzen, muss der Standard Cache von WP ersetzt werden. Dazu gibt es eine <a href="http://neosmart.net/dl.php?id=13">Erweiterung</a>, 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.</p>
<p>Nun aber zu einigen Werten, so dass man sich ein Bild machen kann, was die Nutzung des eAccelerator bei mir bewirkt hat.</p>
<p>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 <a href="http://webjawns.com/tpc-memory-usage-wordpress-plugin/">TPC Memory Usage</a> und die Queries lese ich mit dem Plugin <a href="http://bueltge.de/wordpress-performance-analysieren-plugin/558/">Debug Queries</a>. Die Speichernutzung könnte man noch Steigern, in dem man zusätzlich zum eAccelerator den <a href="http://www.zend.com/en/products/guard/?anchor=Optimizer#Optimizer">Zend Optimizer</a> einsetzt. Nachlesen kann man das in diesem Beitrag <a href="http://webjawns.com/2009/09/wordpress-memory-usage-reduced-from-14mb-to-1-4mb/">WordPress memory usage reduced from 14MB to 1.4MB</a>.</p>
<p>Der Cache von WordPress lässt sich einfach ersetzen, in dem an im Ordner <code>wp-content</code> eine Datei mir dem Namen ablegt, welche dann anstatt der WordPress eigenen <code>cache.php</code> gezogen wird.</p>
<pre><code>
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;
}
</code></pre>
<p>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 <code>object-cache.php</code>. Die Original-Version, die auch gepflegt wird, findet ihr auf der <a href="http://neosmart.net/dl.php?id=13">Seite der Erweiterung</a> von NeoSmart Technologies. Die bieten im übrigen auch Lösungen für den APC und XCache in Verbindung mit WordPress an.</p>
<pre><code>
&lt;?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-&gt;delete($id, $flag);
}

function wp_cache_flush() {
	global $wp_object_cache;

	return $wp_object_cache-&gt;flush();
}

function wp_cache_get($id, $flag = '') {
	global $wp_object_cache;

	return $wp_object_cache-&gt;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-&gt;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-&gt;key($id, $group);
		$result = eaccelerator_rm($key);
		if ( $result )
				unset($this-&gt;cache[$key]);
		return $result;
	}

	function flush() {
		eaccelerator_clear();
		$this-&gt;cache = array ();

		return true;
	}

	function get($id, $group = 'default') {
		$key = $this-&gt;key($id, $group);

		if ( isset($this-&gt;cache[$key]) )
			$value = $this-&gt;cache[$key];
		else
			$value = eaccelerator_get($key);

		$value = maybe_unserialize($value);

		if ( NULL === $value )
			$value = false;

		$this-&gt;cache[$key] = $value;

		return $value;
	}

	function set($id, $data, $group = 'default', $expire = 0) {
		$key = $this-&gt;key($id, $group);
		if ( is_resource($data) )
			return false;

		$data = maybe_serialize($data);

		$result = eaccelerator_put($key, $data, $expire);
		if ( $result )
			$this-&gt;cache[$key] = $data;

		return $result;
	}

	function key($key, $group) {
		global $blog_id;

		if ( empty($group) )
			$group = 'default';

		if (false !== array_search($group, $this-&gt;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 "&lt;p&gt;\n";
		echo "&lt;strong&gt;Cached Variables:&lt;/strong&gt; {$eaccelerator_info['cachedKeys']}&lt;br/&gt;\n";
		echo "&lt;strong&gt;Cached Scripts:&amp;nbsp;&amp;nbsp;&lt;/strong&gt; {$eaccelerator_info['cachedScripts']}&lt;br/&gt;\n";
		echo "&lt;/p&gt;\n";

		if ( !empty($this-&gt;cache) ) {
			echo "&lt;pre&gt;\n\r";
			print_r($this-&gt;cache);
			echo "&lt;/pre&gt;\n\r";
		}
	}

	function WP_Object_Cache() {
		// Empty Constructor
	}
}
} //End Else
?&gt;
</code></pre>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/eaccelerator-fuer-wordpress/1018/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/eaccelerator-fuer-wordpress/1018/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Lastbedingter Umzug und Refinanzierung</title>
		<link>http://bueltge.de/lastbedingter-umzug-und-refinanzierung/985/</link>
		<comments>http://bueltge.de/lastbedingter-umzug-und-refinanzierung/985/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 11:06:59 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Werbung]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=985</guid>
		<description><![CDATA[Wer hier aufmerksam mitlist, der weiß, dass ich seit geraumer Zeit mit der Last, die die Besucher erzeugen, kämpfe. Technisch bin ich mit dem Latein am Ende und so muss ich mich von meinem Webspace-Paket verabschieden. Damit steigen die Kosten und diese möchte ich gern refinanzieren, in dem ich Werbefläche anbiete.

Ich bin nicht der beste Verkäufer, möchte das Blog gern weiter betreiben und freue mich über die vielen Leser; scheinbar ist mein Inhalt also relevant. Aber ich möchte die Kosten, die dieses Blog und die kleinen Nebenprodukte verursachen gern deckeln, so dass ich keinen Aufwand in die finanziellen Kosten des Webspace stecke, sondern in die Inhalte. Daher wird es also ab jetzt die Möglichkeit geben, eine Fläche zu mieten.

Mir ist wichtig, dass der Inhalt lesbar bleibt und das der Leser des Blog weiterhin gern kommt und nicht von Werbung zugeschüttet wird. Daher grenzen sich diverse Angebote schnell ein und da mein Blog ein sehr spezifisches Thema hat ist auch die interessante Reichweite eventuell nicht für jeden Werbenden interessant.
Trotzdem gibt es Partner, die schnell und unkompliziert handeln, an mein Blog glauben und die Möglichkeit der Werbefläche nutzen möchten. Daher muss ich auch keinen Aufruf an Interessenten starten und freue mich, dass <a href="http://www.wpseo.de/">wpSEO</a> der erste offizielle Sponsor dieses Blogs ist.]]></description>
			<content:encoded><![CDATA[<p>Wer hier aufmerksam mitlist, der weiß, dass ich seit geraumer Zeit mit der Last, die die Besucher erzeugen, kämpfe. Technisch bin ich mit dem Latein am Ende und so muss ich mich von meinem Webspace-Paket verabschieden. Damit steigen die Kosten und diese möchte ich gern refinanzieren, in dem ich Werbefläche anbiete.</p>
<p>Ich bin nicht der beste Verkäufer, möchte das Blog gern weiter betreiben und freue mich über die vielen Leser; scheinbar ist mein Inhalt also relevant. Aber ich möchte die Kosten, die dieses Blog und die kleinen Nebenprodukte verursachen gern deckeln, so dass ich keinen Aufwand in die finanziellen Kosten des Webspace stecke, sondern in die Inhalte. Darum wird es ab jetzt die Möglichkeit geben, eine Fläche zu mieten.</p>
<p>Mir ist wichtig, dass der Inhalt lesbar bleibt und das der Leser des Blog weiterhin gern kommt und nicht von Werbung zugeschüttet wird. Daher grenzen sich diverse Angebote schnell ein und da mein Blog ein sehr spezifisches Thema hat ist auch die interessante Reichweite eventuell nicht für jeden Werbenden interessant.<br />
Trotzdem gibt es Partner, die schnell und unkompliziert handeln, an mein Blog glauben und die Möglichkeit der Werbefläche nutzen möchten. Ich muss keinen Aufruf an Interessenten starten und freue mich, dass <a href="http://www.wpseo.de/">wpSEO</a> der erste offizielle Sponsor dieses Blogs ist.<br />
<span id="more-985"></span></p>
<p>Damit wird mir die Investition in Inhalt wesentlich leichter fallen und ich muss die Kosten für den Server nicht allein aufbringen. Auch wenn <a href="http://www.wpseo.de/">wpSEO</a> gerade in deutschen Landen recht bekannt ist, so denke ich doch, dass auch <a href="http://playground.ebiene.de/">Sergej</a>, der Mann hinter <a href="http://www.wpseo.de/">wpSEO</a>, einen Mehrwert davon trägt und das das Plugin für WordPress, welches die Suchmaschinenoptimierung im Blog übernimmt und die Möglichkeiten der Optimierung für Suchmaschinen erweitert, weiter an Bekanntheit gewinnt.</p>
<p><strong>Ich bedanke mich in jedem Fall für das Vertrauen in mein kleines Blog</strong> und wünsche, dass die Leser sich nicht an dem Banner auf allen Beiträgen, die mehr als 100 Wörter haben, stören; sondern es wahr nehmen. Inhaltlich ändert sich damit nichts, ebenso die Ausrichtung meiner Einstellung ändert sich nicht und bueltge.de ist auch weiterhin ein Projekt, welches rein aus eigener Kraft und Lust entsteht. lediglich die Kosten des Blog werden nun besser getragen.</p>
<p>Positiv sollte aber sein, dass die Site in naher Zukunft, so hoffe ich, wieder besser erreichbar ist und weniger Ausfälle produziert. Der Unterschied der Maschine ist doch erheblich und der Umzug des gesamten Webspace erfolgt in den kommenden Tagen.</p>
<h3>Noch mehr Werbung?</h3>
<p>Parallel denke ich darüber nach, Werbung im Feed zu schalten, dabei soll es lediglich um die Fläche unterhalb des jeweiligen Artikel gehen. Was denkt ihr darüber als Leser und würde es Interessenten geben?<br />
Hier ein Screenshot als Beispiel im GReader. Unterhalb eines jeden Beitrag würde die Fläche sein.<br />
<img class="centered" src="http://bueltge.de/wp-content/images/vermarktung/bueltge-feed.png" alt="Screenshot des Feed im GReader" /><br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/lastbedingter-umzug-und-refinanzierung/985/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/lastbedingter-umzug-und-refinanzierung/985/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/vermarktung/bueltge-feed.png" />
		<media:content url="http://bueltge.de/wp-content/images/vermarktung/bueltge-feed.png" medium="image">
			<media:title type="html">Screenshot des Feed im GReader</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress head erleichtern</title>
		<link>http://bueltge.de/wordpress-head-erleichtern/968/</link>
		<comments>http://bueltge.de/wordpress-head-erleichtern/968/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 23:36:25 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=968</guid>
		<description><![CDATA[WordPress bringt seit Version 2.5 stetig neue Standard Funktionen in den head des Themes ein, immer über den Hook <code>wp_head</code>. Auch mit WordPress 2.8 wurden neue Funktion ergänzt, die vorrangig den Link-Tag bedienen. Nicht immer ist das aber gewollt und daher können die Funktionen auch deaktiviert werden, schlicht und einfach mit Hilfe der Funktion <code>remove_action</code>.]]></description>
			<content:encoded><![CDATA[<p>WordPress bringt seit Version 2.5 stetig neue Standard Funktionen in den head des Themes ein, immer über den Hook <code>wp_head</code>. Auch mit WordPress 2.8 wurden neue Funktion ergänzt, die vorrangig den Link-Tag bedienen. Nicht immer ist das aber gewollt und daher können die Funktionen auch deaktiviert werden, schlicht und einfach mit Hilfe der Funktion <code>remove_action</code>.<br />
<span id="more-968"></span></p>
<h3>Funktion <code>remove_action</code></h3>
<p><code>remove_action( $tag, $function_to_add, $priority, $accepted_args );</code></p>
<blockquote><p>This function removes a function attached to a specified action hook. This method can be used to remove default functions attached to a specific action hook and possibly replace them with a substitute.</p>
<p><strong>Important:</strong> To remove a hook, the <code>$function_to_remove</code> and <code>$priority</code> arguments must match when the hook was added. This goes for both filters and actions. No warning will be given on removal failure.<br />
<cite>via: <a href="http://codex.wordpress.org/Function_Reference/remove_action">WP Codex</a></cite></p></blockquote>
<p>Die folgenden Syntax zeigt einen Auszug, der nur einen Teil der Ausgabe zeigt, die man im Theme aktiv haben kann. Sie resultieren aus den Standard Funktion, die in den head des Themes geladen werden. Erkennbar, in dem man in der Datei <code>wp-includes/default-filters.php</code> nach dem Hook <code>wp_head</code> sucht. Nicht alle Filter sollte man deaktivieren, da sie in den meisten Fällen sinnvoll sind. Aber WordPress ist nicht nur in klassischen Blogscenarios im Einsatz und daher bietet es sich, wenn man zumindest die Lösung kennt. Diese ist dann im zweiten Syntax-Feld zu erkennnen.</p>
<pre><code class="php">
&lt;link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://bueltge.de/xmlrpc.php?rsd" /&gt;
&lt;link rel='index' title='bueltge.de [by:ltge.de]' href='http://bueltge.de' /&gt;
&lt;link rel='start' title='WP - Datenbank sichern' href='http://bueltge.de/datenbank-sichern/9/' /&gt;
&lt;link rel='prev' title='WordPress Konstanten nutzen' href='http://bueltge.de/wordpress-konstanten-nutzen/962/' /&gt;
</code></pre>
<p>Hier werden nun diverse Funktion deaktiviert, beispielhaft und nicht als Empfehlung. Untersucht euren Head und schaltet ab, was ihr nicht benötigt. Weniger Markup freut nicht nur die Ladezeit.</p>
<pre><code class="php">
remove_action( 'wp_head', 'feed_links_extra', 3 ); // Display the links to the extra feeds such as category feeds
remove_action( 'wp_head', 'feed_links', 2 ); // Display the links to the general feeds: Post and Comment Feed
remove_action( 'wp_head', 'rsd_link' ); // Display the link to the Really Simple Discovery service endpoint, EditURI link
remove_action( 'wp_head', 'wlwmanifest_link' ); // Display the link to the Windows Live Writer manifest file.
remove_action( 'wp_head', 'index_rel_link'); // index link
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); // prev link
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); // start link
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); // Display relational links for the posts adjacent to the current post.
remove_action(  'wp_head', 'wp_generator' ); // Display the XHTML generator that is generated on the wp_head hook, WP version
</code></pre>
<p>Als Hinweis, wer noch nicht mit eigenen Funktionen im Theme gearbeitet hat: Zugriffe auf Hooks werden durch die Pluginschnittstelle realisiert oder in der <code>functions.php</code> des Themes abgelegt. Sollte es die Datei nicht geben, dann einfach anlegen und im Theme ablegen, WordPress erkennt die Datei und inkludiert die Funktionen.</p>
<h5>Ergänzung</h5>
<p>Mit WordPress 3.0 gibt es einen Filter, der dafür sorgt, dass das P in WordPress immer groß geschrieben wird; muss man aus meiner Sicht nicht haben, kostet nur unnötig Last. Daher entfernt man auch diesen Filter, der auf drei Hooks geht.</p>
<pre><code class="php">
// Remove Format WordPress 
foreach ( array( 'the_content', 'the_title', 'comment_text' ) as $filter ) { 
	remove_filter( $filter, 'capital_P_dangit' ); 
}
</code></pre>
<p>Mit 3.0 wurde auch der Filter für relational links umgestellt, daher der folgende Code, der beide Filter beachtet, je nach WordPress version.</p>
<pre><code class="php">
if ( !remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ) )
    remove_action ('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
</code></pre>
<p><cite>Ergänzt von <a href="http://lloc.de/noch-mehr-zu-wordpress-themes-optimieren.html">realloc</a></cite><br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-head-erleichtern/968/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-head-erleichtern/968/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Debug Objects - WordPress Plugin</title>
		<link>http://bueltge.de/debug-objects-wordpress-plugin/966/</link>
		<comments>http://bueltge.de/debug-objects-wordpress-plugin/966/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 10:46:28 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[StyleSheet]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=966</guid>
		<description><![CDATA[Das Plugin <em>Debug objects</em> gibt dem User, der die entsprechenden Rechte mitbringt, im Standard der Administrator, eine große Anzahl von Informationen an die Hand. Es werden Werte und Inhalte ausgelesen und im Frontend des Blog dargestellt um Fehler zu analysieren aber auch um WordPress besser zu verstehen und an die Anforderungen anzupassen. Daher ist es für Entwickler und Leute, die WordPress besser verstehen wollen, geeignet.]]></description>
			<content:encoded><![CDATA[<p>Das Plugin <em>Debug objects</em> gibt dem User, der die entsprechenden Rechte mitbringt, im Standard der Administrator, eine große Anzahl von Informationen an die Hand. Es werden Werte und Inhalte ausgelesen und im Frontend des Blog dargestellt um Fehler zu analysieren aber auch um WordPress besser zu verstehen und an die Anforderungen anzupassen. Daher ist es für Entwickler und Leute, die WordPress besser verstehen wollen, geeignet.<br />
<span id="more-966"></span><br />
Das Plugin gibt in diversen Tabs Informationen zu; im folgenden eine Liste von diversen Möglichkeiten, auch wenn das Plugin wesentlich mehr ausgibt. Je nach Arbeitsweise können diverse Reiter besonders interessant sein oder weg fallen. Aktuell habe ich aber keine Optionen hinterlegt, die das steuern sollen.</p>
<ul>
<li>PHP</li>
<li>Speichernutzung</li>
<li>Betriebssystem</li>
<li>Server</li>
<li>WordPress Version</li>
<li>Sprache</li>
<li>sehr umfangreiche Definitionen von diversen Konstanten</li>
<li>Cookie Definitionen</li>
<li>Dateirechte</li>
<li>Eigene User- und Usermeta-Tabellen</li>
<li>FTP- und SSH Definitionen</li>
<li>Query informationen</li>
<li>Conditional Tags; wert des Tags</li>
<li>Theme informationen</li>
<li>Template informationen</li>
<li>Cache inhalte</li>
<li>Hooks und Filter</li>
<li>Funktionen, die auf Hooks und Filter ansprechen</li>
<li>inhalte von Arrays zu Hooks und Filtern</li>
<li>alle definierten Konstanten</li>
</ul>
<p>Das Plugin kann mit meinem Plugin <a href="http://bueltge.de/wordpress-performance-analysieren-plugin/558/">Debug Queries</a> zusammen arbeiten und damit die Analyse und Optimierung des Blog genutzt werden. <a href="http://bueltge.de/wordpress-performance-analysieren-plugin/558/">Debug Queries</a> wird in die Ausleitung integriert und ist auch nur für User mit den entsprechenden Rechten möglich. Damit kann die Analyse und Optimierung der Performance an WordPress verbessert werden.</p>
<p>Das Plugin filtert keinerlei Werte und sollte nur zur Information und Optimierung eingesetzt werden, es ist nicht im Livebetrieb des Blog empfohlen. Für Entwickler kann es schnell Daten liefern, die die Einsatz in einer Entwicklungsumgebung befürworten.</p>
<h3>Beispielscreenshot des ersten Tab</h3>
<p><img class="centered" src="http://bueltge.de/wp-content/images/wp/debug_objects.png" alt="Screenshot Debug Objects Tab 1" /></p>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="amount" id="eins" value="" /><br />
<input type="hidden" name="cmd" value="_xclick" /><br />
<input type="hidden" name="business" value="frank@bueltge.de" /><br />
<input type="hidden" name="item_name" value="Spende bueltge.de Debug Objects" /><br />
<input type="hidden" name="no_shipping" value="1" /><br />
<input type="hidden" name="return" value="http://bueltge.de/" /><br />
<input type="hidden" name="cancel_return" value="http://bueltge.de/" /><input type="hidden" name="currency_code" value="EUR" /><br />
<input type="hidden" name="tax" value="0" /><br />
<input type="hidden" name="bn" value="PP-DonationsBF" /><br />
<input type="image" src="http://bueltge.de/wp-content/images/donate.png" style="border:0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!" /></form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.<br />
Möchtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<p>Der Download ist im offiziellen Repository von WP zu finden: <a href="http://wordpress.org/extend/plugins/debug-objects/">wordpress.org/extend/plugins/debug-objects/</a> oder nutzt den Installer direkt im Administrationsbereich von WordPress</p>
<h3>Historie</h3>
<p>Seit geraumer Zeit bietet das WordPress Plugin Repository die Möglichkeit der Ausgabe des Changelog an und so werde ich direkt am Plugin, in der Readme die Historie pflegen - daher bitte ich, dass ihr euch <a href="http://wordpress.org/extend/plugins/debug-objects/changelog/">dort die Änderungen anschaut</a>, so dass ich ein wenig hier pflegen muss: <a href="http://wordpress.org/extend/plugins/debug-objects/changelog/">Changelog</a>.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/debug-objects-wordpress-plugin/966/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/debug-objects-wordpress-plugin/966/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/debug_objects.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/debug_objects.png" medium="image">
			<media:title type="html">Screenshot Debug Objects Tab 1</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Probleme fassen</title>
		<link>http://bueltge.de/probleme-fassen/965/</link>
		<comments>http://bueltge.de/probleme-fassen/965/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 14:46:16 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Problem]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=965</guid>
		<description><![CDATA[Aktuell habe ich enorme Lastprobleme und suche nach einer Lösung in dem ich die Hintergründe analysiere. Zum Glück habe ich ein wissendes Team, eigene Erfahrung und einen Hoster, der mich unterstützt. Lieber Leser, lieber Kunde - bei Problemen bitte ich um Geduld und Nachsicht. In erster Linie kommt meine Familie und mein Job, dann kommt [...]]]></description>
			<content:encoded><![CDATA[<p>Aktuell habe ich enorme Lastprobleme und suche nach einer Lösung in dem ich die Hintergründe analysiere. Zum Glück habe ich ein <a href="http://inpsyde.com/">wissendes Team</a>, eigene Erfahrung und einen <a href="http://allincl.com/">Hoster</a>, der mich unterstützt.</p>
<p>Lieber Leser, lieber Kunde - bei Problemen bitte ich um Geduld und Nachsicht.<br />
In erster Linie kommt meine Familie und mein Job, dann kommt das Blog hier; zumindest so lange alles privat läuft.<br />
<strong>Vielen Dank für das Verständnis und die Geduld.</strong><br />
Sobald ich eine Lösung finde, ist der Inhalt wieder zeitnah abrufbar und Mails und Kommentare werden beantwortet. Nicht wundern, diverse Plugins sind nicht immer aktiv, da ich unterschiedliche Scenarios durch spiele.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/probleme-fassen/965/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/probleme-fassen/965/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Mehr Speicher für WordPress</title>
		<link>http://bueltge.de/mehr-speicher-fuer-wordpress/957/</link>
		<comments>http://bueltge.de/mehr-speicher-fuer-wordpress/957/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:39:32 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Linktipp]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=957</guid>
		<description><![CDATA[WordPress wächst und wächst, mit dem Wachsen von WordPress wächst ebenso der Bedarf des Speichers. Im Standard nutzt WordPress 32 MByte (siehe <code>settings.php</code>), die auch heute nicht jeder Hoster zur Verfügung stellt. Das ist ein Problem - daher: liebe Hoster, gebt den Nutzern mehr Speicher!

Um den Speicher aber auch zu nutzen, bedarf es einer kleinen Syntax-Erweiterung in der Konfiguration von WordPress.]]></description>
			<content:encoded><![CDATA[<p>WordPress wächst und wächst, mit dem Wachsen von WordPress wächst ebenso der Bedarf des Speichers. Im Standard nutzt WordPress 32 MByte (siehe <code>settings.php</code>), die auch heute nicht jeder Hoster zur Verfügung stellt. Das ist ein Problem - daher: liebe Hoster, gebt den Nutzern mehr Speicher!</p>
<p>Um den Speicher aber auch zu nutzen, bedarf es einer kleinen Syntax-Erweiterung in der Konfiguration von WordPress.<br />
<span id="more-957"></span><br />
Eine Übersicht, wie der Bedarf ist, gibt schnell und unkompliziert das Plugin für WordPress <em><a href="http://alexrabe.boelinger.com/2009/06/14/dear-hoster-we-need-more-memory/">WP-Memory-Usage</a></em> von Alex Rabe.</p>
<p><img src="http://bueltge.de/wp-content/images/wp/memory-overview.png" alt="memory-overview" title="memory-overview" width="417" height="247" class="centered" /></p>
<p>Es empfiehlt sich beim Arbeiten mit WordPress den Speicher zu erhöhen (Schon mit WordPress 2.5 <a href="http://bueltge.de/wordpress-cache-optmieren/646/">habe ich das erklärt</a>), insofern der Hoster das zulässt. Dazu muss lediglich die <code>wp-config.php</code> erweitert werden; dies man tut man am besten Schrittweise um den Möglichkeiten des Hosters auszuloten.</p>
<pre><code>
// more memory
define('WP_MEMORY_LIMIT', '64M');
// even more memory
define('WP_MEMORY_LIMIT', '96M');
// a good deal more memory <img src='http://bueltge.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> 
define('WP_MEMORY_LIMIT', '128M');
</code></pre>
<p>Erhaltet ihr als Rückgabe eine weiße Seite, dann war es zu viel und dann geht es wieder abwärts um 32 MByte. Viel Erfolg.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/mehr-speicher-fuer-wordpress/957/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/mehr-speicher-fuer-wordpress/957/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/memory-overview.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/memory-overview.png" medium="image">
			<media:title type="html">memory-overview</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Link vs. @import</title>
		<link>http://bueltge.de/link-vs-import/934/</link>
		<comments>http://bueltge.de/link-vs-import/934/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 18:51:06 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[CSS, xHTML, JS]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Linktipp]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[StyleSheet]]></category>
		<category><![CDATA[Webdeveloper]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=934</guid>
		<description><![CDATA[Die Implementierung von Stylesheets kann man mit unterschiedlichen Anweisungen machen und ich bekomme immer wieder die Frage, warum ich mich für <code>&#60;link</code> entschieden habe und nicht via <code>@import</code> die Stylesheets einbinde.]]></description>
			<content:encoded><![CDATA[<p>Die Implementierung von Stylesheets kann man mit unterschiedlichen Anweisungen machen und ich bekomme immer wieder die Frage, warum ich mich für <code>&lt;link</code> entschieden habe und nicht via <code>@import</code> die Stylesheets einbinde.<br />
Gerade in meinem <a href="http://code.google.com/p/wp-basis-theme/">Basis-Theme für WordPress</a> scheint das aufzufallen und diverse Nutzer zu stören.</p>
<p>Der klare Umschwung ist bei mir nach dem Lesen des Buches &#8222;<a href="https://www.amazon.de/dp/389721850X?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=389721850X&#038;adid=1MMXCF2MX45MDJAGA3YM&#038;">High Performance Websites</a>&#8220; von Steve Souders, Chief Performance Yahoo! bei Yahoo!, gefallen und ich löse nun alles per <code>&lt;link</code>.<br />
Nun ist mir aber die öffentlich zugängliche Seite des Buchautors wieder unter gekommen und dort publiziert Steve einen Beitrag zum Thema. Diesen Link möchte ich damit einfach mal als Begründung, Rechtfertigung oder <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/">Lesetipp</a> hier präsentieren.</p>
<p><strong>Die klare Aussage:</strong> Kein <code>@import</code> nutzen.</p>
<p>Spannender Artikel, der sicher bei dem einen oder anderen Veränderungen hervorruft. Daher der Tipp, den Beitrag <a href="http://www.stevesouders.com/blog/2009/04/09/dont-use-import/">don’t use @import</a> zum Buch zu lesen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/link-vs-import/934/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/link-vs-import/934/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Web-Buchempfehlungen zu Weihnachten</title>
		<link>http://bueltge.de/web-buchempfehlungen-zu-weihnachten/841/</link>
		<comments>http://bueltge.de/web-buchempfehlungen-zu-weihnachten/841/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 12:59:38 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[CSS, xHTML, JS]]></category>
		<category><![CDATA[Literatur]]></category>
		<category><![CDATA[Buch]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[xHTML]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=841</guid>
		<description><![CDATA[Die Weihnachtszeit naht und noch immer nicht alle Geschenke oder gar keine Idee für einen Wunsch?
Wer sich mit dem Thema Webentwicklung beschäftigt und der einen oder anderen Person im nahen Umfeld einen Tipp geben möchte, dem gebe ich mal im folgenden in kurzen Ausführen einige Hinweise auf Literatur, die aus meiner Sicht als Empfehlenswert angesehen werden kann. Dabei möchte ich nur einige wenige Bücher nennen, die sich in irgendeiner Form mit Webentwicklung beschäftigen. Weitere <a href="http://grochtdreis.de/weblog/2008/12/02/empfehlenswerte-buecher-zu-weihnachten-teil-2/">Empfehlungen</a> finden sich bei Jens, der in mir diese Idee entzündete. ]]></description>
			<content:encoded><![CDATA[<p>Die Weihnachtszeit naht und noch immer nicht alle Geschenke oder gar keine Idee für einen Wunsch?<br />
Wer sich mit dem Thema Webentwicklung beschäftigt und der einen oder anderen Person im nahen Umfeld einen Tipp geben möchte, dem gebe ich mal im folgenden in kurzen Ausführen einige Hinweise auf Literatur, die aus meiner Sicht als Empfehlenswert angesehen werden kann. Dabei möchte ich nur einige wenige Bücher nennen, die sich in irgendeiner Form mit Webentwicklung beschäftigen. Weitere <a href="http://grochtdreis.de/weblog/2008/12/02/empfehlenswerte-buecher-zu-weihnachten-teil-2/">Empfehlungen</a> finden sich bei Jens, der in mir diese Idee entzündete.<br />
<span id="more-841"></span><br />
Wer mich kennt oder schon länger hier mit liest, der weiß wie ich Bücher schätze und dass ich relativ große Mengen davon verschlinge. Um ab und zu Platz in den Regalen zu bekommen und weil ich denke, dass gerade Bücher in dem schnelllebigen Bereich der Webtechnik, veraltet sind, verlose ich ab und dann einige dieser Exemplare. Die <a href="http://bueltge.de/10000-ad/832/">aktuelle Verlosung</a> läuft noch bis zum 10. Dezember - also Mitmachen, wenn man noch Lesestoff braucht.</p>
<p>Nun aber zu meinen Empfehlungen. Die Liste hat keine besondere Relevanz, sie entspringt in Reihenfolge keiner Wertung, nur meinem Gedächtnis. Ebenso wurde kein Buch als Rezensionsexemplar überlassen oder wurde sonst irgendwie gepuscht um hier zu erscheinen &#8211; es handelt sich also um tatsächliche Empfehlungen aus meiner Sicht, auch wenn ich das eine oder andere Buch im Halbschlaf oder diagonal gelesen habe um Zeit zu sparen.<br />
Alle integrierten Bilder sind Affiliatelinks, wer sie nicht nutzen möchte, der sollte direkt zum Handel oder Versand gehen.</p>
<ul>
<li>
<h4><a href="https://www.amazon.de/dp/3827325455?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=3827325455&#038;adid=1TXKCZRDPN29JWERVTCY&#038;">Transcending CSS - Neue kreative Spielräume im Webdesign</a></h4>
<p><a href="https://www.amazon.de/dp/3827325455?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=3827325455&#038;adid=1TXKCZRDPN29JWERVTCY&#038;"><img class="alignright" src="https://images-na.ssl-images-amazon.com/images/I/41SyiXaK%2BmL._SL160_.jpg" alt="Transcending CSS" /></a><br />
Die aktuell Auswahl zu Büchern mit dem Thema CSS sind vielfältig und das Werk von Andy Clarke ist nicht das aktuellste in diesem Sektor. Für mich stellt es aber trotzdem noch immer das beste Werk zum Thema dar. Hier wird nicht vermittelt was man wissen sollte, hier wird in klarer und verständlicher Form Hintergrundwissen übergeben. Die Leichtigkeit mit der Andy Clark die Inhalte vermittelt, begeistern. Gleichzeitig werden komplexe Verhalten verständlich dargestellt und der Leser wird nicht nur begeistert, er wird immer abgeholt. Man fühlt sich wohl &#8211; auch ohne das Buch parallel am Rechner zu lesen und die Ideen und Lösungen nachzuvollziehen. Dieses Buch vermittelt Grundlagen und Verständnis, begonnen beim Markup und nicht bei komplexen CSS-Hacks. Hier steht nicht nur die Technik im Vordergrund, sondern die Idee, das Verständnis.<br />
Gleichzeitig ist aber dieses Buch kein Nachschlagewerk, es ist &#8222;Leseliteratur&#8220; zum Thema.</li>
<li>
<h4><a href="https://www.amazon.de/dp/389721850X?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=389721850X&#038;adid=1EYVC3HVRYQJR0XSG6ZE&#038;">High Performance Websites</a></h4>
<p><a href="https://www.amazon.de/dp/389721850X?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=389721850X&#038;adid=1EYVC3HVRYQJR0XSG6ZE&#038;"><img class="alignright" src="https://images-na.ssl-images-amazon.com/images/I/411YNwGPL2L._SL160_.jpg" alt="High Performance Websites" /></a><br />
Aus meiner Sicht starten viele Websiten mit einem Design und dann werden viele Erscheinungen um das Design zu kurz und unvollständig betrachtet. Dazu gehört auch die Performance einer Website. Steve Souders zeigt in seinem Buch, dass Performance mehr als die allgegenwärtige Meinung &#8211; dass es am Backend liegt &#8211;ist. Performance von Websites ist Frontendentwicklung. Dieses Werk liest sich flüssig, trotz des Themas. Steve Souders ist es gelungen den Leser zu begeistern; man möchte am liebsten schon beim Lesen anfangen und optimieren, lernen, umsetzen. Sicher, dass Meiste war mir bekannt und nicht immer beachte ich es - manches mit Absicht. Dieses Buch kann aber auch als Arbeitsliste diene, als Ausrufezeichen auf dem Schreibtisch. </li>
<li>
<h4><a href="https://www.amazon.de/dp/3836212072?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=3836212072&#038;adid=1YT7XBZQYRMWFH02HS4C&#038;">Grundkurs Typografie und Layout</a></h4>
<p><a href="https://www.amazon.de/dp/3836212072?tag=buedebyltgde-21&#038;camp=1410&#038;creative=6378&#038;linkCode=as1&#038;creativeASIN=3836212072&#038;adid=1YT7XBZQYRMWFH02HS4C&#038;"><img class="alignright" src="https://images-na.ssl-images-amazon.com/images/I/41xX6mKfjgL._SL160_.jpg" alt="Grundkurs Typografie und Layout" /></a><br />
Ich bin &#8222;Hobbyist&#8220; zum Thema Webentwicklung und -design, Grundlagen wie Typographie habe ich nicht und somit war es mir immer ein Wunsch auch in diesem Thema mehr als Gefühl zu haben. Sicher kann man die eine oder andere Website lesen und lernen &#8211; gesammeltes Wissen in gebundener Ausgabe sind jedoch für mich unverzichtbar. Das Buch von Claudia Runk ist daher in diesem Bereich eines der Werke die ich gern empfehle. Dabei stimmen hier Preis und Leistung. Gerade im Bereich der Typographie kann man schnell viel Geld für Bücher los werden. Um so schöner, dass dieses Buch bei moderatem Preis mit umfassendem und verständlichem Wissen glänzt. Ich habe gelernt, verstanden - Bezüge zu Altagsthemen sind nun klarer. Claudia Runk gibt ebenso Hinweise für diverse Applikationen, die ich aus meiner Sicht nicht benötige, da ich ich mich vorrangig im Editor aufhalte. Trotzdem ist dieser Mehrwert nicht überflüssig und drückt die Seitenzahl unnötig in die Höhe. Basics und Mehrwert zum Theme Typographie in einem Buch - für mich ein Buch, was die Stunden des Lesens wert sind.
</li>
</ul>
<h3>Fazit und Ausblick</h3>
<p>Soweit drei Empfehlungen aus der Vielzahl an Büchern, die mir in diesem Jahr unter gekommen sind. Nochmal der Hinweis, dass es keine Wertung ist, in welcher Reihenfolge und dass nur die Drei in diesen Beitrag einfließen.<br />
Vielleicht habe ich damit aber dem einen oder anderen Leser eine Hilfe oder einen Tipp zum Lesen außerhalb des Bildschirm gegeben oder man hat eine Geschenkidee für den geneigten Interessenten.</p>
<p>In der Vergangenheit habe ich des öfteren nicht nur zum Thema Web Literaturrezensionen im Blog veröffentlicht. Zeitmangel und andere Projekte haben leider dafür gesorgt, dass die Kategorie Literatur schon lange kein Update mehr bekommen hat. Eventuell finde ich im neuen Jahr wieder dazu.</p>
<p>Auch hier wieder der Hinweis, dass man die Kommentarfunktion gern nutzen kann und soll - auch ich mag Empfehlungen oder Kritik zu Büchern.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/web-buchempfehlungen-zu-weihnachten/841/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/web-buchempfehlungen-zu-weihnachten/841/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:thumbnail url="http://bueltge.de//images-na.ssl-images-amazon.com/images/I/41SyiXaK%2BmL._SL160_.jpg" />
		<media:content url="http://bueltge.de//images-na.ssl-images-amazon.com/images/I/41SyiXaK%2BmL._SL160_.jpg" medium="image">
			<media:title type="html">Transcending CSS</media:title>
		</media:content>
		<media:content url="http://bueltge.de//images-na.ssl-images-amazon.com/images/I/411YNwGPL2L._SL160_.jpg" medium="image">
			<media:title type="html">High Performance Websites</media:title>
		</media:content>
		<media:content url="http://bueltge.de//images-na.ssl-images-amazon.com/images/I/41xX6mKfjgL._SL160_.jpg" medium="image">
			<media:title type="html">Grundkurs Typografie und Layout</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WPlize, Klasse für Optionen in WordPress</title>
		<link>http://bueltge.de/wplize-klasse-fuer-optionen-in-wordpress/778/</link>
		<comments>http://bueltge.de/wplize-klasse-fuer-optionen-in-wordpress/778/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 09:28:49 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Theme]]></category>

		<guid isPermaLink="false">http://bueltge.de/?p=778</guid>
		<description><![CDATA[<em>WPlize</em> ist eine Klasse, die man frei nutzen darf und soll. Sie dient dem Zugriff auf die Tabelle <code>options</code> von WordPress und erleichtert das <strong>Anlegen</strong>, <strong>Ablegen</strong>, <strong>Holen</strong> und <strong>Löschen</strong> von Einstellungen zu Plugins oder Themes in der Datenbank, Tabelle <code>options</code>, von WordPress. Durch die Verwendung dieser Klasse werden Plugins und Themes performanter und sauber aufgebaut. Es wird pro Plugin oder Theme nur ein Eintrag in der Datenbank angelegt, mit Hilfe eines Array werden diese Daten dort hinterlegt und verwaltet.]]></description>
			<content:encoded><![CDATA[<p>Da der Titel nicht besser gelungen ist, hole ich gleich zu beginn mal ein wenig aus und erkläre was <em>WPlize</em> macht und wozu es gedacht ist.</p>
<p><em>WPlize</em> ist eine Klasse, die man frei nutzen darf und soll. Sie dient dem Zugriff auf die Tabelle <code>options</code> von WordPress und erleichtert das <strong>Anlegen</strong>, <strong>Ablegen</strong>, <strong>Holen</strong> und <strong>Löschen</strong> von Einstellungen zu Plugins oder Themes in der Datenbank, Tabelle <code>options</code>, von WordPress. Durch die Verwendung dieser Klasse werden Plugins und Themes performanter und sauber aufgebaut. Es wird pro Plugin oder Theme nur ein Eintrag in der Datenbank angelegt, mit Hilfe eines Array werden diese Daten dort hinterlegt und verwaltet.<br />
Viele Plugins legen sehr viele Daten ab, nur als Beispiel: das populäre Kontaktform-Plugin <a href="http://wordpress.org/extend/plugins/cforms/">cforms</a> legt ca. 60 Einträge ab, die damit auch sehr viele Aufrufe starten und die Last erhöhen.<br />
Das muss nicht sein, den WordPress unterstützt im Standard das Nutzen von Arrays. Auch einzelne Einträge werden von WordPress über das interne Caching performanter gestaltet, allerdings ist dies nie so optimal wie ein Array für viele Einträge als viele Einträge in der Datenbank.<br />
<span id="more-778"></span><br />
Die Lösung nutze ich schon seit geraumer Zeit und habe bisher jeweils neue Funktionen in meinen Plugins dafür abgelegt. In älteren Plugins habe ich die Vorgehensweise zum Teil noch nicht umgesetzt, bei entsprechenden Änderungen und Zeit wird dies aber passieren.</p>
<p>Durch eine Kommunikation mit <a href="http://www.ebiene.de/">Sergej Müller</a> (bekannt durch sein Plugin <a href="http://www.wpseo.de/">wpSEO</a>), dem ich diese Variante empfahl ist eine gemeinsame Arbeit entstanden, die Sergej dann gleich auf ein eigenständige Klasse erweitert hat, so dass es nun einfacher und mit viel weniger Code integrierbar ist.<br />
Im ersten Wurf stand uns der Sinn nach einem Plugin, was den Zugriff aus anderen Plugins ermöglicht. Da wir aber glauben, dass es dann nicht zu einer Verbreitung kommt, habe wir diese Idee wieder verworfen und möchten die Klasse nun hier anbieten und stellen sie zum Nutzen frei.</p>
<p>Die Klasse stellt nicht die Funktionen von WordPress in Frage, sie nutzt diese ebenfalls. Sie macht es nur einfacher, dass Plugin- und Theme-Autoren einen performanteren Zugriff ohne viel Mühe haben. Die klassischen Funktion <code>add_option</code>, <code>delete_option</code>, <code>get_option</code> und <code>update_option</code> kommen trotzdem in den Funktionen der Klasse zum Einsatz.</p>
<h3>Welche Möglichkeiten bietet die Klasse und wie bindet man sie ein?</h3>
<p>Die Datei am besten in einem Unterordner eures Plugins oder Themes ablegen und via PHP einbinden.</p>
<pre><code>
if ( !class_exists('WPlize') ) {
	require_once('inc/WPlize.php');
}
</code></pre>
<p>Dadurch stehen dann die unterschiedlichen Zugriffe zur Verfügung und sollen anhand folgender Syntax ein wenig näher erklärt werden.<br />
Dem Download liegt auch ein <em>Readme</em>-Datei bei, so dass Erklärungen und Beispiele auch dort zu finden sind.</p>
<ul>
<li><strong>Multi-Option initialisieren</strong>
<pre><code>
$WPlize = new WPlize(
                     'my_plugin',
                     array(
                          'my_key'   => 'my_value',
                          'your_key' => 'your_value'
                          )
                    );
</code></pre>
</li>
<li><strong>Option updaten [Variante 1]</strong>
<pre><code>$WPlize-&gt;update_option('my_key', 'simple_value');</code></pre>
</li>
<li><strong>Option updaten [Variante 2]</strong>
<pre><code>
$WPlize->update_option(
                       array(
                             'my_key'   =&gt; 'my_value',
                             'your_key' =&gt; 'simple_value'
                            )
                      );
</code></pre>
</li>
<li><strong>Option auslesen</strong>
<pre><code>$WPlize-&gt;get_option('your_key');</code></pre>
</li>
<li><strong>Multi-Option entfernen</strong>
<pre><code>$WPlize-&gt;delete_option();</code></pre>
</li>
</ul>
<h3>Download:</h3>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="amount" id="eins" value="" /><br />
<input type="hidden" name="cmd" value="_xclick" /><br />
<input type="hidden" name="business" value="frank@bueltge.de" /><br />
<input type="hidden" name="item_name" value="Spende bueltge.de" /><br />
<input type="hidden" name="no_shipping" value="1" /><br />
<input type="hidden" name="return" value="http://bueltge.de/" /><br />
<input type="hidden" name="cancel_return" value="http://bueltge.de/" /><input type="hidden" name="currency_code" value="EUR" /><br />
<input type="hidden" name="tax" value="0" /><br />
<input type="hidden" name="bn" value="PP-DonationsBF" /><br />
<input type="image" src="http://bueltge.de/wp-content/images/donate.png" style="border:0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!" /></form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.<br />
Möchtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<p>Download als zip-Datei: <a href="http://bueltge.de/wp-content/download/wp/class_WPlize.zip">class_WPlize.zip</a> - 3 kByte<br />
<br style="clear:left" /></p>
<h3 id="historie">Historie</h3>
<ul>
<li>26.09.2008 - Idee und Lösung</li>
<li>09.12.2008 - update der Prüfungen</li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wplize-klasse-fuer-optionen-in-wordpress/778/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wplize-klasse-fuer-optionen-in-wordpress/778/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress 2.5 Cache</title>
		<link>http://bueltge.de/wordpress-cache-optmieren/646/</link>
		<comments>http://bueltge.de/wordpress-cache-optmieren/646/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 21:16:44 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[WP]]></category>
		<category><![CDATA[WP2.5]]></category>

		<guid isPermaLink="false">http://bueltge.de/wordpress-cache-optmieren/646/</guid>
		<description><![CDATA[Der WordPress eigene Cache ist keine Neuigkeit mehr, trotzdem gibt es mit der Version 2.5 einige Veränderungen. Hier will ich nicht tiefer auf Aktivierung und Nutzung des Cache eingehen, ebenso nicht auf die Nutzung der sehr vielen verschiedenen Plugins zum Thema Cache. Liegt einfach daran, dass meine Tests nicht abgeschlossen sind und es ein sehr [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignrightob" src="http://bueltge.de/wp-content/images/wordpress-logo.png" alt="WordPress Logo" /></p>
<p>Der WordPress eigene <a href="http://codex.wordpress.org/Function_Reference/WP_Cache">Cache</a> ist keine Neuigkeit mehr, trotzdem gibt es mit der Version 2.5 einige Veränderungen. Hier will ich nicht tiefer auf Aktivierung und Nutzung des Cache eingehen, ebenso nicht auf die Nutzung der sehr vielen verschiedenen Plugins zum Thema Cache. Liegt einfach daran, dass meine Tests nicht abgeschlossen sind und es ein sehr vielschichtiges Thema ist. Außerdem möchte ich dem Laien diese Nutzung in WordPress nicht empfehlen, zu viele Randbedingungen. Zum Cache und deren Optimierung habe ich schon vor einiger Zeit einige Hinweise gegeben, siehe &#8222;<a href="http://bueltge.de/wordpress-cache-kontrollieren/479/">WordPress Cache kontrollieren</a>&#8220;.</p>
<blockquote><p><strong>Cache</strong> (BE: [kaʃ], AE: [kæʃ]) bezeichnet in der EDV einen schnellen Puffer-Speicher, der in unterschiedlichen Geräten wie z. B. CPUs oder Festplatten zum Einsatz kommt.<br />
<cite><a href="http://de.wikipedia.org/wiki/Cache">Wikipedia</a></cite></p></blockquote>
<p>Aber weil immer wieder Fragen in Zusammenhang mit WP 2.5 auftauchen einige wenige nützliche Hinweise zum Cache.<span id="more-646"></span> Grundsätzlich muss man sagen, WordPress arbeitet an diesem Thema und erfüllt damit die Wünsche der Nutzer. Man muss aber auch sagen, ältere Versionen sind schneller, was aber vor allem daran liegt, dass WordPress unaufhaltsam wächst. Das gilt nicht nur für die Nutzerzahlen, sondern auch für die Funktionen der Applikation.</p>
<p>Ebenso ist aktuell der Stand so, dass die meisten Plugins für WordPress einen besseren Cache anbieten, als es der hauseigen ist, auch der in WP 2.5. Nun aber zum internen Cache, diesen zu nutzen ist ratsam!</p>
<p>Mit der neuen Version 2.5 wurde der Cache verändert, es wird nun der Arbeitsspeicher genutzt. Der Objekt-Cache, welcher sich in der <code>/wp-includes/cache.php</code> befindet, nutzt nicht mehr das Dateisystem. Die Aktivierung des Cache geschieht durch das Hinterlegen der Konstanten in der <code>wp-config.php</code>.</p>
<pre><code>
define('ENABLE_CACHE', true); // Cache on
define('CACHE_EXPIRATION_TIME', 604800); // Time in seconds, default is 900s
</code></pre>
<p>Im weiteren empfiehlt es sich das PHP Memory Limit zu definieren, zu erhöhen. Im Standard hat WordPress diesen in der Version 2.5 auf 32 MByte gesetzt, siehe <code>wp-settings.php</code>. Um diesen Wert zu ändern, muss man aber nicht in die Datei eingreifen, es genügt das Hinterlegen der entsprechenden Konstante in der <code>wp-config.php</code>.</p>
<pre><code>
define('WP_MEMORY_LIMIT', '64M');
</code></pre>
<p>Ein Wert von 32 MByte sollte recht gut sein, das eine oder andere Experiment gibt eventuell Aufschluss.</p>
<p>Zur Überwachung und Optimierung des Cache empfiehlt sich auch weiterhin das Plugin &#8222;<a href="http://bueltge.de/wordpress-cache-kontrollieren/479/">PJW WP Cache Inspect</a>&#8220;, welches von <a href="http://blog.ftwr.co.uk/wordpress/wp-cache-inspect/">Peter Westwood</a> ist und durch mich ein wenig angepasst wurde, dabei habe ich Veränderungen zum Leeren des Cache und zur Funktion unter WordPress 2.5 vorgenommen - näheres im Artikel &#8222;<a href="http://bueltge.de/wordpress-cache-kontrollieren/479/">WordPress Cache kontrollieren</a>&#8220;. Dort steht auch das Plugin zum Download bereit.</p>
<p>Sollte es aber doch zu Problemen mit der neuen Cache-Version kommen, dann kann man mittels Plugin &#8222;<a href="http://neosmart.net/blog/2008/file-based-extension-to-the-wordpress-object-cache/">File-Based Object Cache Extension</a>&#8220; den alten dateibasierenden Cache wieder aktivieren. Es ist aber ratsam, den aktuellen Cache zu nutzen. Sollte es Probleme mit dem Webspace-Provider geben, so ist eine Zusammenarbeit ratsam bevor man den Cache der Vorgängerversion wieder aktiviert, denn die Last kann doch recht hoch sein. Alternativ kann man mit den verschiedensten Plugins, wenn es tatsächlich so viele Zugriffe sind, die Last senken, was vor allem für die CPU-Last des Servers gilt.</p>
<h3>Weiterführende Links</h3>
<ul>
<li><a href="http://dougal.gunters.org/blog/2006/07/21/using-the-wordpress-object-cache">Nutzung in eigenen Funktionen</a></li>
<li><a href="http://codex.wordpress.org/Function_Reference/WP_Cache">Doku im Codex</a></li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-cache-optmieren/646/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-cache-optmieren/646/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wordpress-logo.png" />
		<media:content url="http://bueltge.de/wp-content/images/wordpress-logo.png" medium="image">
			<media:title type="html">WordPress Logo</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>Feed ohne Bilder?</title>
		<link>http://bueltge.de/feed-ohne-bilder/642/</link>
		<comments>http://bueltge.de/feed-ohne-bilder/642/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 14:23:11 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Webküche]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[Bild]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://bueltge.de/feed-ohne-bilder/642/</guid>
		<description><![CDATA[Kleine Umfrage - im vorhergehenden Artikel, der extra dafür hinterlegt wurde, ist ein Bild eingefügt, welches keine Relevanz für den Inhalt hat und damit nur kosmetisches Beiwerk ist. Der Vorzug an Feeds ist unter anderem der schlanke Code und die damit verbundene Last, ohne JavaScript und CSS kommt man schnell zum Inhalt des Artikels. Wäre [...]]]></description>
			<content:encoded><![CDATA[<p>Kleine Umfrage - im <a href="http://bueltge.de/nofollow-fuer-den-more-link-in-wordpress/641/">vorhergehenden Artikel</a>, der extra dafür hinterlegt wurde, ist ein Bild eingefügt, welches keine Relevanz für den Inhalt hat und damit nur kosmetisches Beiwerk ist.<br />
Der Vorzug an Feeds ist unter anderem der schlanke Code und die damit verbundene Last, ohne JavaScript und CSS kommt man schnell zum Inhalt des Artikels.</p>
<p>Wäre es nicht sinnvoll, dass man Bilder, insofern sie nicht relevant sind, aus dem Inhalt entfernt? Hat einen kleinen Nebeneffekt, wenn der Leser informiert wird, was man aber einfach im Footer des Feeds machen könnte, zum Beispiel über das <a href="http://bueltge.de/wp-feed-plugin/204/">Plugin &copy;Feed</a>, dass Leser des Feeds ab und dann die Seite besuchen.</p>
<p>Meinungen sind gefragt, würde mich über konstruktive Meinungen und ja - mit Bild oder nein - ohne Bild freuen, die Kommentarfunktion steht euch wie immer offen.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/feed-ohne-bilder/642/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/feed-ohne-bilder/642/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WP Super Cache Plugin beschleunigen</title>
		<link>http://bueltge.de/wp-super-cache-plugin-beschleunigen/622/</link>
		<comments>http://bueltge.de/wp-super-cache-plugin-beschleunigen/622/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 13:38:53 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/wp-super-cache-plugin-beschleunigen/622/</guid>
		<description><![CDATA[Das Plugin WP Super Cache genießt einen guten Ruf und die Technologie und Entwicklung wird bestens gepflegt. Da ich aktuell einige Versuche gemacht hatte, kam mir ein interessanter Artikel unter, mit dessen Hack man die Geschwindigkeit des Plugins noch beschleunigen kann. Die Ergebnisse des Test lassen sich in einem weiteren Artikel des Autors vergleichen. Der [...]]]></description>
			<content:encoded><![CDATA[<p>Das Plugin <a href="http://ocaoimh.ie/wp-super-cache/">WP Super Cache</a> genießt einen guten Ruf und die Technologie und Entwicklung wird bestens gepflegt. Da ich aktuell einige Versuche gemacht hatte, kam mir ein <a href="http://www.askapache.com/htaccess/hacking-wp-super-cache-for-speed.html">interessanter Artikel</a> unter, mit dessen Hack man die Geschwindigkeit des Plugins noch beschleunigen kann.<br />
Die Ergebnisse des Test lassen sich in einem <a href="http://www.askapache.com/wordpress/wp-cache-speed-hack.html">weiteren Artikel</a> des Autors vergleichen. Der Test wurde mit dem Firefox und dem <a href="http://developer.yahoo.com/yslow/">Add-on YSlow</a> durchgeführt.<span id="more-622"></span></p>
<p>Damit will ich nicht jedem empfehlen, das Plugin zu nutzen! Die Entscheidung basiert auf vielen Überlegungen und lohnt nicht bei verhältnismäßig niedrigen Besucherzahlen.</p>
<p>Anmerkend muss man ebenso sagen, dass WordPress unter PHP 5.3* wesentlich <a href="http://ckon.wordpress.com/2008/03/28/php-53/">zügiger unterwegs ist</a>. Es wird also Zeit, dass die Webspace-Anbieter endlich zum Zuge kommen und updaten, 4.* ist Altlast.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wp-super-cache-plugin-beschleunigen/622/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wp-super-cache-plugin-beschleunigen/622/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>JavaScript in HTML einbinden</title>
		<link>http://bueltge.de/javascript-in-html-einbinden/593/</link>
		<comments>http://bueltge.de/javascript-in-html-einbinden/593/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 13:26:43 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[CSS, xHTML, JS]]></category>
		<category><![CDATA[Webküche]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://bueltge.de/javascript-in-html-einbinden/593/</guid>
		<description><![CDATA[Das Einbinden von JavaScript in Webseiten ist kein neues Thema mehr, seit der Generation Web 2.0 aber kaum wegzudenken. Immer mehr Seiten bieten kleine Features an, die mit JS realisiert werden. Oft werden dabei die Funktionen in den Vordergrund gestellt und auch im Zeitaltern von DSL und anderen schnellen Datenverbindungen sollte die Webseitengeschwindigkeit nicht vergessen werden. Und in diesem Zusammenhang gibt es einige Überlegungen und Hinweise, welche ich in diesem Artikel auf Wunsch von Stephan erklären möchte.

Dabei kommt natürlich in erster Linie meine Meinung zum Tragen, welche vielleicht eine kleine Diskussion anstößt und wo man Feedback von Webworkern bekommt, die mehr im Thema stecken als ein Hobby-Webworker, wie ich es bin.]]></description>
			<content:encoded><![CDATA[<p>Das Einbinden von JavaScript in Webseiten ist kein neues Thema mehr, seit der Generation Web 2.0 aber kaum wegzudenken. Immer mehr Seiten bieten kleine Features an, die mit JS realisiert werden. Oft werden dabei die Funktionen in den Vordergrund gestellt und auch im Zeitaltern von DSL und anderen schnellen Datenverbindungen sollte die Webseitengeschwindigkeit nicht vergessen werden. Und in diesem Zusammenhang gibt es einige Überlegungen und Hinweise, welche ich in diesem Artikel auf Wunsch von <a href="http://bueltge.de/png-transparenz-im-ie-5-ie-6/592/#comment-164659">Stephan</a> erklären möchte.</p>
<p>Dabei kommt natürlich in erster Linie meine Meinung zum Tragen, welche vielleicht eine kleine Diskussion anstößt und wo man Feedback von Webworkern bekommt, die mehr im Thema stecken als ein Hobby-Webworker, wie ich es bin.<br />
<span id="more-593"></span></p>
<h3>Mögliche Formen</h3>
<p>Grundlegend kann man JavaScript in drei verschiedenen Formen unterbringen.</p>
<ul>
<li><code>head</code></li>
<li><code>body</code></li>
<li><code>body</code>-Tag</li>
</ul>
<p>In vielen aktuellen Projekten, werden JavaScript Frameworks eingesetzt, da sind besonders bekannt: <a href="http://bueltge.de/?s=prototype">Prototype</a> und <a href="http://bueltge.de/?s=jquery">jQuery</a>. Zu beiden habe ich im Blog schon einige Infos hinterlegt.</p>
<h3>Hintergrundüberlegungen und Realisierung</h3>
<p>Im Vorfeld sollte man überlegen:</p>
<ul>
<li>Ist das JavaScript unbedingt notwendig für den Besucher?</li>
<li>Kann ich den Inhalt auch ohne JavaScript konsumieren?</li>
<li>Ist die Größe des Scriptes gerechtfertigt?</li>
</ul>
<p>Im weiteren gilt es: JavaScript ist im optimalen Fall ausgelagert, in eine separate Datei, die dann im jeweiligen Abschnitt des HTML eingebunden wird. Der Zugriff auf die Datei sollte nur einmalig erfolgen.</p>
<p>Das Script gehört <strong>nur geladen</strong>, wenn man es auch <strong>benötigt</strong>! Gerade beim Einsatz von Plugins für WordPress sieht oft die vielfache Verwendung von JS-Frameworks, da sie per Hook eingebunden werden. Solche Sachen sind besser im Template des Themes aufgehoben und auch dann kann man mit <a href="http://bueltge.de/wp-tutorial-wir-schreiben-ein-wordpress-theme-teil-3/527/">Conditional Tags</a> (auf diese habe ich schon <a href="http://bueltge.de/?s=Conditional+Tags">mehrfach hingewiesen</a>!) sehr leicht abfragen, ob man das Script laden muss.</p>
<h4>Beispiel</h4>
<p>Vielfach wird JS genutzt, um eine <a href="http://bueltge.de/live-kommentarvorschau-mit-jquery-und-wordpress/541/">Live-Vorschau des Kommentars</a> zu ermöglichen. Dieses Script wird dann aber auch nur benötigt, wenn es die Möglichkeit von Kommentaren gibt, also in der Regel nur auf einem Beitrag oder einer Seite. Diese beiden sind unter WordPress leicht abzufragen.</p>
<pre><code>
&lt;?php if ( is_single() || is_page() ) { ?&gt;
	&lt;script src="&lt;?php bloginfo('template_directory'); ?&gt;/js/example_script.js" type="text/javascript"&gt;&lt;!--mce:0--&gt;&lt;/script&gt;
&lt;?php } ?&gt;
</code></pre>
<h3>Wohin mit dem Script</h3>
<p>Aus meiner persönlichen Sicht plädiere ich dafür, dass Scripte, die <strong>nicht unbedingt für den Leser notwendig</strong> sind, am <strong>Ende einer Seite</strong> geladen werden. Damit stelle ich sicher, dass der Besucher den Inhalt, für den er sich in der Regel am meisten interessiert, schnell bekommt. Die meisten Besucher kommen von Suchmaschinen, zumindest sehen das alle Statistiken so, die ich verfolge.</p>
<p>Ist das Script im <code>head</code> eingebunden, dann hat es den Vorteil, dass es beim Laden eingelesen wird und dann im Speicher bereit steht. Nachteilig ist, dass damit der Inhalt warten muss, bis das/ die Scripte geladen sind. Deshalb überlegen, ist es wirklich notwendig.</p>
<p>Im weiteren eine Forderung von mir: Ich möchte, dass Seiten auch ohne aktives JavaScript die Inhalte präsentieren und mir nicht ihren Inhalt verweigern. Mir ist klar, dass ist nicht bei allen Anwendungen möglich, aber für eine Vielzahl von Webseiten wäre es kein Problem, denn JS sind dort nur da, um Spielereien und Mehrwert der Seite zu realisieren.</p>
<h4>Beispiel Footer</h4>
<pre><code>

		&lt;?php if ( is_single() || is_page() ) { ?&gt;
		&lt;script src="&lt;?php bloginfo('template_url'); ?&gt;/js/example.js" type="text/javascript"&gt;&lt;!--mce:1--&gt;&lt;/script&gt;
		&lt;?php } ?&gt;

</code></pre>
<p>Alle notwendigen Scripte gehören ansonsten in den <code>head</code>. Allerdings auch diese sind ausgelagert und werden einmalig eingebunden.</p>
<h4>Beispiel <code>head</code></h4>
<pre><code>
	&lt;script src="&lt;?php bloginfo('template_url'); ?&gt;/js/example.js" type="text/javascript"&gt;&lt;!--mce:2--&gt;&lt;/script&gt;
	&lt;?php if ( is_single() ) { ?&gt;
		&lt;script src="&lt;?php bloginfo('template_url'); ?&gt;/js/example.js" type="text/javascript"&gt;&lt;!--mce:3--&gt;&lt;/script&gt;
	&lt;?php } ?&gt;
	&lt;script type="text/javascript"&gt;&lt;!--mce:4--&gt;&lt;/script&gt;

	&lt;?php wp_head(); ?&gt;
</code></pre>
<h3>Komprimieren</h3>
<p>Auch wenn man die JS-Dateien auslagert und zu einer Datei zusammen fasst, können sie noch eine beachtliche Größe erzielen. Daher kann man als Alternative noch die Komprimierung der Scripte versuchen. Dies ist im übrigen auch mit CSS- und HTML-Dateien möglich, aber das nur am Rande.</p>
<p>Schon das Entfernen von Kommentaren und Leerzeichen bringt Geschwindigkeit. Ebenfalls gilt das für die Verwendung von Variablennamen in PHP, je kürzer, desto schneller. Aber Achtung, ein gesundes Verhältnis sollte gewahrt bleiben, vor allem an Projekten, an den ständig gearbeitet wird. Denn gerade Eindeutigkeit, Übersichtlichkeit und Dokumentation können das Arbeiten enorm erleichtern.</p>
<p>Aber zurück zu JavaScript. Hier bietet sich die Komprimierung an, gerade bei Verwendung von Frameworks, auf die man keinen Einfluss nimmt. Die komprimierte Version wird in der Regel vom Anbieter schon mit angeboten und man muss lediglich diese Version einbinden.</p>
<p>Für das Komprimieren von JavaScript gibt es Online-Tools, die die Arbeit abnehmen und erleichtern. Zwei Beispiele sollen für die Vielzahl an Möglichkeiten genannt werden.</p>
<ol>
<li><a href="http://compressor.ebiene.de/">Compressor JS und CSS</a></li>
<li><a href="http://compressor.ebiene.de/">JavaScript Compressor</a></li>
</ol>
<p>Ein Hinweis, nach der Komprimierung testen - nicht immer ist das Ergebnis befriedigend.</p>
<p>Alternativ kann man die Dateien noch als gzip-komprimiertes File einbinden. Dazu muss mod_rewrite im Webserver aktiv sein und die <code>.htaccess</code> muss folgenden Inhalt haben. Der Syntax geht davon aus, dass die CSS-Datei direkt im Theme-Ordner liegt und die JavaScript-Dateien im Ordner <code>/js/</code>.</p>
<pre><code>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:Accept-Encoding} .*gzip.*
RewriteRule ^js/(.*)\.js$ /js/$1.js.gz [L]
RewriteRule ^/(.*)\.css$ /$1.css.gz [L]
AddEncoding x-gzip text.gz
</code></pre>
<p>Dazu einen Linktipp auf einen schlüssigen und klaren Artikel zum Thema: <a href="http://www.alinki.com/de/blog/archives/27">gzip-komprimiertes Javascript und CSS effektiv ausliefern</a>.</p>
<h3>Fazit</h3>
<p>Ich hoffe, dass es verständlich und einleuchtend ist. Nichtsdestotrotz stellt der Artikel lediglich meinen Standpunkt dar. Für Feedback und Hinweise bin ich wie immer dankbar.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/javascript-in-html-einbinden/593/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/javascript-in-html-einbinden/593/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>WordPress Performance analysieren (Plugin)</title>
		<link>http://bueltge.de/wordpress-performance-analysieren-plugin/558/</link>
		<comments>http://bueltge.de/wordpress-performance-analysieren-plugin/558/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 10:12:52 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Template]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://bueltge.de/wordpress-performance-analysieren-plugin/558/</guid>
		<description><![CDATA[Die Performance von WordPress kann schnell und einfach mittels einiger Plugins verschlechtert werden. Dazu muss man kein Experte sein, mehr Funktionalität sorgt für mehr Last. Allerdings sorgt gerade die Einfachheit und offene Arbeitsweise von WordPress, die WordPress unter anderem so populär gemacht haben und ich sehr schätze, zu einem Problem - das Plugin muss nicht unbedingt von Profi-Entwicklern erstellt sein und die Optimierung des Syntax würde viel im Bereich Performance verbessern.

Nun aber zum eigentlichen Problem: <strong>wie findet man die Schwachstelle im Blog</strong>?]]></description>
			<content:encoded><![CDATA[<p>Die Performance von WordPress kann schnell und einfach mittels einiger Plugins verschlechtert werden. Dazu muss man kein Experte sein, mehr Funktionalität sorgt für mehr Last. Allerdings sorgt gerade die Einfachheit und offene Arbeitsweise von WordPress, die WordPress unter anderem so populär gemacht haben und ich sehr schätze, zu einem Problem - das Plugin muss nicht unbedingt von Profi-Entwicklern erstellt sein und die Optimierung des Syntax würde viel im Bereich Performance verbessern.</p>
<p>Nun aber zum eigentlichen Problem: <strong>wie findet man die Schwachstelle im Blog</strong>?<br />
<span id="more-558"></span><br />
Einerseits kann mittels weniger Tools die Performance analysieren, dazu dient mir beispielsweise das <a href="http://bueltge.de/firefox-add-on-firebug-fuer-webentwickler-ein-muss/294/">Add on Firebug</a> im Browser Firefox. Damit sind schnell große Scripte gefunden und Schwachstellen im Code. Dazu auch der Hinweis auf den Artikel &bdquo;<a href="http://bueltge.de/ladezeiten-bei-wordpress-templates-optimieren/320/">Ladezeiten bei WordPress-Templates optimieren</a>&ldquo;. Sinnvoll ist ebenfalls, die &bdquo;vielen&ldquo; Scripte, die einige Plugins mitbringen, nicht per <code>wp_head</code>, sondern in <code>wp_footer</code> anzusteuern. Damit bleibt der Aufbau nicht an den Scripten hängen, die eventuell nur Mehrwert bieten. Ab in den Footer mit derartigen Scripten.</p>
<p>Allerdings ist die Analyse via Deaktivieren/ Aktivieren aller Plugins nach und nach mühsam. Da wäre es doch sinnvoll, man sucht die einzelnen Queries ab und schaut auf welche Funktion sie verweisen.</p>
<p>WordPress bietet von Hause aus die Möglichkeit, dass man sich die Gesamtzahl der Queries ausgeben lassen kann, ebenso die benötigte Zeit. Mit folgendem Syntax, vorzugsweise in den Footer der Seite gelegt, ist dies schnell geschehen.</p>
<pre><code>&lt;?php echo $wpdb->num_queries; ?&gt;q, &lt;?php timer_stop(1); ?&gt;s</code></pre>
<p>Aber die Variable <code>$wpdb</code> bietet mehr, dazu schaut man in die <code>/wp-includes/wp-db.php</code>.</p>
<pre><code>
if (!defined('SAVEQUERIES'))
	define('SAVEQUERIES', false);

class wpdb {

	var $show_errors = true;
	var $num_queries = 0;
	var $last_query;
	var $col_info;
	var $queries;
	var $prefix = '';

	// Our tables
	var $posts;
	var $users;
	var $categories;
	var $post2cat;
	var $comments;
	var $links;
	var $options;
	var $postmeta;
	var $usermeta;
	var $terms;
	var $term_taxonomy;
	var $term_relationships;
	var $tables = array('users', 'usermeta', 'posts', 'categories', 'post2cat', 'comments', 'links', 'link2cat', 'options', 'postmeta', 'terms', 'term_taxonomy', 'term_relationships');
	var $charset;
	var $collate;
</code></pre>
<p>Dabei fällt die Konstante <code>SAVEQUERIES</code> auf, die im Standard nicht in der <code>wp-config.php</code> definiert ist. Setzt man diese Konstante auf <code>TRUE</code>, dann sind weitere Möglichkeiten offen.<br />
Aber auch darauf will ich nicht im Detail eingehen, denn es würde zu weit führen, wer Interesse hat, der findet in der besagten Datei eine ganze Reihe von Infos.</p>
<p>Mein Ziel war es nun aber, dass man nicht die Gesamtzahl der Queries im Blog als Ergebnis bekommt, sondern die einzelnen Abfragen inklusive ihrer auszuführenden Syntax, denn so kann ich das Problem explizit im Code finden.</p>
<p>Damit die Arbeit einfach und schnell an dem jeweiligen Blog von der Hand geht, habe ich die Funktion in ein Plugin ausgelagert und aktiviere es nur, wenn ich auch eine Analyse durchführen möchte. Außerdem wird die Analyse nur gestartet und das Ergebnis ausgeben, wenn man als Administrator eingeloggt ist.</p>
<p>Das Ergebnis kann das beispielsweise folgendermaßen aussehen.<br />
<a href="http://wordpress.org/extend/plugins/debug-queries/screenshot-1.png"><img class="centered" src="http://bueltge.de/wp-content/images/wp/debug_queries.png" alt="Screenshot Ergebnis WordPress Plugin Debug Queries" /></a></p>
<pre><code>
16. Time: 0.000431060791016
      Query: SELECT object_id, term_taxonomy_id FROM fb122_term_relationships INNER JOIN fb122_posts ON object_id = ID WHERE term_taxonomy_id IN (6,5,1) AND post_type = 'post' AND post_status = 'publish'
      Call from: wp-includes\taxonomy.php(2093): wpdb->get_results()

17. Time: 0.00243401527405
      Query: SELECT t.*, tt.* FROM fb122_terms AS t INNER JOIN fb122_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('link_category') AND tt.count > 0 ORDER BY t.name ASC
      Call from: wp-includes\taxonomy.php(777): wpdb->get_results()

18. Time: 0.00080418586731
      Query: SELECT * , IF (DATE_ADD(link_updated, INTERVAL 120 MINUTE) >= NOW(), 1,0) as recently_updated FROM fb122_links INNER JOIN fb122_term_relationships AS tr ON (fb122_links.link_id = tr.object_id) INNER JOIN fb122_term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE 1=1 AND link_visible = 'Y' AND ( tt.term_id = 2 ) AND taxonomy = 'link_category' ORDER BY link_name ASC
      Call from: wp-includes\bookmark.php(255): wpdb->get_results()

 * Total query time: 0.02111s for 18 queries.
 * Page generated in 0.36373s, 94.20% PHP, 5.80% MySQL
</code></pre>
<p>Für den Laien ist damit die Arbeit sicher nicht unbedingt angenehm, aber so finde ich die eigentlichen Probleme in der Datenbankabfrage und kann die jeweilige Abfrage in den Dateien suchen und eventuell verbessern bzw. deaktivieren. Das Plugin bedient noch einige mehr Informationen als das obige Tutorial, so dass es verständlicher wird und mehr Informationen liefert.</p>
<h3>Debug Queries (Plugin)</h3>
<p>Nach dem Aktivieren des Plugins werden die einzelnen Abfragen in den Footer der Seite geschrieben, als HTML-Kommentar, so dass man den Quelltext analysieren muss, um an die Werte zu kommen. Die Werte werden nur analysiert und ausgegeben, wenn man als Administrator im Blog eingeloggt ist.</p>
<h4>Anforderungen:</h4>
<p>Das Plugin benötigt WordPress Version 1.5 und wurde getestet bis Version 2.9-rare.</p>
<h4>Installation:</h4>
<ol>
<li>Die zip-Datei downloaden und entpacken</li>
<li>Kopiere die Datei in dein Plugin-Verzeichnis (<code>/wp-content/plugins/</code>)</li>
<li>Aktiviere das Plugin im Admin-Bereich deines Blogs</li>
</ol>
<h4>Download:</h4>
<form class="spenden" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="amount" id="eins" value="" /><br />
<input type="hidden" name="cmd" value="_xclick" /><input type="hidden" name="business" value="frank@bueltge.de" /><input type="hidden" name="item_name" value="Spende bueltge.de" /><input type="hidden" name="no_shipping" value="1" /><input type="hidden" name="return" value="http://bueltge.de/" /><input type="hidden" name="cancel_return" value="http://bueltge.de/" /><input type="hidden" name="currency_code" value="EUR" /><input type="hidden" name="tax" value="0" /><input type="hidden" name="bn" value="PP-DonationsBF" /><input type="image" src="http://bueltge.de/wp-content/images/donate.png" style="border:0" name="submit" alt="Zahlen Sie mit PayPal - schnell, kostenlos und sicher!" /><br />
</form>
<p><strong>Ist die Arbeit nicht 1 Euro wert?</strong><br />
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.<br />
Möchtest du mehr oder anders spenden, so besuche meine <a href="http://bueltge.de/wunschliste/">Wunschliste</a>.</p>
<p>
Download als zip-Datei:<br />
<a href="http://downloads.wordpress.org/plugin/debug-queries.zip" >downloads.wordpress.org/plugin/debug-queries.zip</a> - 2 kByte</p>
<h3 id="historie">Historie</h3>
<ul>
<li>0.1 - Idee und Umsetzung</li>
<li>0.2 - Erweiterung der Ausgabe (30/03/2009)</li>
<li>0.3 - Bugfix (31/03/2009)</li>
<li>0.4 - WP2.8 tauglich-neue Rechte, gekapselte Klasse, Ausgabe im Frontend, viel Code neu (18./04/2009)</li>
<li>0.4.1 - Bug für 2.7 korrigiert, CSS-Pfad; Hinweis ergänzt, wenn es verschiedene Ergebnisse der Queries gibt</li>
<li>0.5 - Erweiterung diverser Werte, PHP und mySQL Umfang und Hinweise (04/05/2009)</li>
<li>* - für weitere Änderungen bitte <a href="http://wordpress.org/extend/plugins/debug-queries/changelog/">Changelog</a> besuchen</li>
</ul>
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/wordpress-performance-analysieren-plugin/558/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/wordpress-performance-analysieren-plugin/558/feed/</wfw:commentRss>
		<slash:comments>97</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/wp-content/images/wp/debug_queries.png" />
		<media:content url="http://bueltge.de/wp-content/images/wp/debug_queries.png" medium="image">
			<media:title type="html">Screenshot Ergebnis WordPress Plugin Debug Queries</media:title>
		</media:content>
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP Performance von Single- oder Doublequotes, Part 2</title>
		<link>http://bueltge.de/php-performance-von-single-oder-doublequotes-part-2/508/</link>
		<comments>http://bueltge.de/php-performance-von-single-oder-doublequotes-part-2/508/#comments</comments>
		<pubDate>Mon, 17 Sep 2007 07:38:48 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://bueltge.de/php-performance-von-single-oder-doublequotes-part-2/508/</guid>
		<description><![CDATA[Im Beitrag PHP Performance von Single- oder Doublequotes hatte ich befürchtet, dass sich mein Weltbild beim Schreiben von PHP-Code ändern müsste. Denn die Analyse des Blog PHP-Performance, der sich ausgiebig und übersichtlich mit Performance im Bereich PHP beschäftigt, ergab eine neue Erkenntniss: PHP- Ausgaben mit Doublequotes sind schneller. Schon damals entbrannte eine Diskussion und in [...]]]></description>
			<content:encoded><![CDATA[<p>Im Beitrag <a href="http://bueltge.de/php-performance-von-single-oder-doublequotes/449/">PHP Performance von Single- oder Doublequotes</a> hatte ich befürchtet, dass sich mein Weltbild beim Schreiben von PHP-Code ändern müsste. Denn die Analyse des Blog <a href="http://phpperformance.de/gaensefuesschen-oder-hochkomma/">PHP-Performance</a>, der sich ausgiebig und übersichtlich mit Performance im Bereich PHP beschäftigt, ergab eine neue Erkenntniss: PHP- Ausgaben mit Doublequotes sind schneller. Schon damals entbrannte eine Diskussion und in meinem <a href="http://bueltge.de/php-performance-von-single-oder-doublequotes/449/">Artikel</a> habe ich angedeutet, dass ich noch einmal einige Tests fahren möchte.<br />
<span id="more-508"></span><br />
Nun ist die Datei im meinem XAMPP zwar gelaufen und die Werte haben mein Weltbild wieder gerückt und meine Code-Zeilen werden weiterhin mit dem Singlequotes beprägt sein, aber dort kann sie niemandem nützen. Deshalb und vor allem durch das <a href="http://christian.hess-gruenig.de/blog/single-oder-double-quoted-strings/">Blog von Christian</a> erinnert, habe ich die Datei in meinen <a href="http://bueltge.de/test/test_hochkomma.php">Experimente-Ordner</a> geladen und jeder Interessierte kann sich davon überzeugen, dass Singelquotes schneller sind. Das Parsen fällt nun mal weg.</p>
<p>Entscheidenter Unterschied: die Schleifendauer ist höher. Wenn die Schleifenwerte zu klein sind, dann spielt das System eine größere Rolle als die Arbeit des Parsers. Mit einem großen Schleifenwert bekommt man also wahre Werte im Bezug auf das Parsen der Quotes.<br />
In diesem Zusammenhang auch ein Dankeschön an den aufmerksamen Leser <a href="http://www.sebbi.de/">Sebbi</a>, der auf diesen Umstand in den <a href="http://phpperformance.de/gaensefuesschen-oder-hochkomma/#comment-189">Kommentaren</a> aufmerksam gemacht hat.</p>
<h3>Die Ergebniswerte</h3>
<p><code>$test = 'Dies ist der test ' . $i;</code><br />
Verbrauchte Zeit mit Singlequotes: 0.0974500179291</p>
<p><code>$test2 = "Dies ist der test " . $i2;</code><br />
Verbrauchte Zeit mit Douplequotes und Variable extern: 0.163120985031</p>
<p><code>$test3 = &quot;Dies ist der test $i3&quot;</code><br />
Verbrauchte Zeit mit Douplequotes und Variable intern: 0.185966014862 </p>
<p>Im Anschluss der Code für die erste Schleife des Tests.</p>
<pre><code>
&lt;?php
$startt = microtime(true);

for ($i = 0; $i <= 100000; $i++) {
	$test = 'Dies ist der test ' . $i;
}

$endt = microtime(true);
echo '<br /><b>Verbrauchte Zeit mit Singlequotes: ' . ($endt - $startt) . '</b>';
?&gt;
</code></pre>
<p>Alle weiteren Codeschnipsel und Ergebnisse sind im <a href="http://bueltge.de/test/test_hochkomma.php">Test</a> zu finden, ebenso der <a href="http://bueltge.de/test/test_hochkomma.php">Download</a> der Datei - für alle, die den Test ebenso fahren wollen<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/php-performance-von-single-oder-doublequotes-part-2/508/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/php-performance-von-single-oder-doublequotes-part-2/508/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP Performance von Single- oder Doublequotes</title>
		<link>http://bueltge.de/php-performance-von-single-oder-doublequotes/449/</link>
		<comments>http://bueltge.de/php-performance-von-single-oder-doublequotes/449/#comments</comments>
		<pubDate>Sat, 23 Jun 2007 08:17:34 +0000</pubDate>
		<dc:creator>Frank Bültge</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://bueltge.de/php-performance-von-single-oder-doublequotes/449/</guid>
		<description><![CDATA[Bisher war mein PHP-Weltbild davon geprägt, dass der Syntax mit Singelquotes (Hochkommata ') schneller interpretiert wird, als eine Anweisung mittels Doublequotes (Gänsefüßchen ") - siehe Beitrag "WK - Performancegewinn bei php". Damit man weiß, wovon ich rede, ein Beispiel: $string = '123'; // doublequotes echo "Die Variable " $string " wird ausgegeben."; // singelquotes echo [...]]]></description>
			<content:encoded><![CDATA[<p>Bisher war mein PHP-Weltbild davon geprägt, dass der Syntax mit Singelquotes (Hochkommata ') schneller interpretiert wird, als eine Anweisung mittels Doublequotes (Gänsefüßchen ") - siehe Beitrag "<a href="http://bueltge.de/wk-performancegewinn-bei-php/135/">WK - Performancegewinn bei php</a>".</p>
<p>Damit man weiß, wovon ich rede, ein Beispiel:</p>
<pre><code>
$string = '123';

// doublequotes
echo "Die Variable " $string " wird ausgegeben.";

// singelquotes
echo 'Die Variable ' . $string . ' wird ausgegeben.';
</code></pre>
<p>Nun hat sich das Blog <a href="http://phpperformance.de/gaensefuesschen-oder-hochkomma/">PHP Performance</a> ausgiebig mit der Analyse der beiden unterschiedlichen Syntax auseinandergesetzt und das Ergebnis zeigt eindeutig, dass der Syntax mit Doublequotes (") schneller ist.</p>
<p>Ebenso hat er die Analyse ausgedehnt auf Komma anstatt Punkt als Konkatenierungszeichen, was nochmals zu minimalen Beschleunigungen führt.<br />
Damit man weiß, wovon ich rede, ein Beispiel:</p>
<pre><code>
$string = '123';

// doublequotes mit Kommata
echo "Die Variable " , $string , " wird ausgegeben.";
</code></pre>
<h3>Fazit:</h3>
<p>Stelle ich nun meine Gewohnheit um, oder bleibe ich bei den alten Erkenntnissen. In jedem Fall werde ich mal, wenn ich wieder etwas schreibe, Messungen durchführen und mich dann für die schnellere Variante entscheiden.</p>
<p>Die Messungen macht er übrigens mit der Klasse Profiling, wozu es ebenso wunderbare <a href="http://phpperformance.de/performance-einzelner-code-bloecke-ermitteln/">Informationen</a> gibt.</p>
<p>Ein Hoch auf das <a href="http://phpperformance.de/">Blog PHP Performance</a>, so was fehlte mir im deutschsprachigen Raum.<br />
<hr />
<p><img src="http://bueltge.de/favicon.ico" alt="bueltge.de Favicon"/> <small>&copy; <a href="http://bueltge.de/">Frank B&uuml;ltge</a>, All rights reserved / Alle Rechte vorbehalten. (ID: 6e8b33de4342c4f2ca76b245199aeee8)</small></p>
<p><a href="http://bueltge.de/feed/"><img style="border: medium none ; float: left; margin-right: 10px;" src="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" alt="Feed Icon" width="34" height="34" /></a>Danke für das Abonnieren meines <strong><a href="http://bueltge.de/feed/">Feed</a></strong>! Inhalt gefällt? <a href="http://bueltge.de/wunschliste/" title="Wunschliste">Danke sagen</a> &middot; <a href="http://bueltge.de/php-performance-von-single-oder-doublequotes/449/#writecomment" title="zu den Kommentaren dieses Artikels">Kommentieren</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bueltge.de/php-performance-von-single-oder-doublequotes/449/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:thumbnail url="http://bueltge.de/favicon.ico" />
		<media:content url="http://bueltge.de/favicon.ico" medium="image">
			<media:title type="html">bueltge.de Favicon</media:title>
		</media:content>
		<media:content url="http://bueltge.de/wp-content/themes/black_label/images/rss.gif" medium="image">
			<media:title type="html">Feed Icon</media:title>
		</media:content>
	</item>
	</channel>
</rss>

