<?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/"
	>

<channel>
	<title>ajaveeb &#187; Performance</title>
	<atom:link href="http://ajaveeb.de/tags/performance/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaveeb.de</link>
	<description>Das Technikblog von Benjamin Hofmann</description>
	<lastBuildDate>Fri, 26 Feb 2010 20:21:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>(Mikro-)Optimierungen</title>
		<link>http://ajaveeb.de/mikro-optimierungen-701</link>
		<comments>http://ajaveeb.de/mikro-optimierungen-701#comments</comments>
		<pubDate>Wed, 24 Feb 2010 06:30:37 +0000</pubDate>
		<dc:creator>Benni</dc:creator>
				<category><![CDATA[Beiträge]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ajaveeb.de/?p=701</guid>
		<description><![CDATA[Optimieren von Code ist toll und kann gewaltige Vorteile in der Performance bringen. Aber man sollte es nicht &#252;bertreiben.]]></description>
			<content:encoded><![CDATA[<p class="mainimage"><img src="http://img.ajaveeb.de/403ab68c4e554f924b0332909dfb5e9d.jpg" alt="(Mikro-)Optimierungen" width="596" height="298" /></p><p style="font-weight:bold">Optimieren von Code ist toll und kann gewaltige Vorteile in der Performance bringen. Aber man sollte es nicht übertreiben.</p><p>Es gibt dutzende, wenn nicht sogar hunderte oder tausende, Wege eine Anwendung performanter zu gestalten. Einer der meistgenutzten Wege ist die <a href="http://ajaveeb.de/tags/optimierung" class="st_tag internal_tag" rel="tag" title="Posts tagged with Optimierung">Optimierung</a> des Codes. Hierbei gibt es nat&#252;rlich einige sehr interessante und gute Ans&#228;tze, aber auch viele, die die Wartungsf&#228;higkeit des Codes einschr&#228;nken oder schlichtweg nur minimale Gewinne bringen.</p>
<p>Vorweg wollen wir uns jedoch mit der Frage besch&#228;ftigen, ob Optimierungen wirklich n&#246;tig sind. Wenn eine Anwendung in einer f&#252;r den Nutzer zumutbaren Zeit reagiert sollte man sich keine Gedanken machen hier noch etwas zu verbessern. Ebenso sollte man sich keinen unn&#246;tigen Aufwand zumuten, wenn sich das Problem durch Aufstocken der Hardware l&#246;sen l&#228;sst. Meist bringt das mehr und kommt g&#252;nstiger. Man sollte jedoch dringend etwas unternehmen, wenn sich die Hardware sowieso schon auf einem Maximallevel befindet und diese an ihre Grenzen st&#246;&#223;t.</p>
<p>Der &#252;bliche Weg ist dann mithilfe eines <a href="http://de.wikipedia.org/wiki/Profiler_%28Programmierung%29">Profilers</a> die Stellen im Code zu finden, die die Anwendung ausbremsen. Sobald man sie gefunden hat macht man sich Gedanken, was man verbessern kann. Beispiele hierf&#252;r sind weniger Datenbankabfragen ausf&#252;hren, Ergebnisse zu cachen, Statements optimieren, etc.</p>
<p>Was man jedoch tunlichst vermeiden sollte sind Mikro-Optimierungen. In <a href="http://ajaveeb.de/tags/php" class="st_tag internal_tag" rel="tag" title="Posts tagged with PHP">PHP</a> gibt es hierf&#252;r <a href="http://www.phpbar.de/w/Code-Optimierungen">einige</a> <a href="http://www.drweb.de/magazin/schneller-php-schneller/">tolle</a> <a href="http://www.4webmaster.net/tutorials_artikel/php_mysql/optimiert_programmieren_in_php.htm">Beispiele</a>, z.B. Strings in einfache Hochkommata schreiben, Prekrement statt Postkrement verwenden, k&#252;rzere Variablennamen zu verwenden, usw. Ich pers&#246;nlich habe mir zwar einige Sachen davon angew&#246;hnt, da es nie schaden kann hier und da eine tausendstel Millisekunde zu sparen, jedoch bringen diese Optimierungen meistens keine Verbesserung im Gegensatz zum vorherigen Stand. Viel wichtiger ist es seinen Code nochmal zu &#252;berdenken und alternative Methoden zu finden, die die Ausf&#252;hrung beschleunigen.</p>
<p>Irgendwie habe ich gerade das Gef&#252;hl, dass ich was komplett anderes geschrieben habe als ich urspr&#252;nglich wollte, aber die wichtigste Message habe ich genannt und darauf kommt es an. &#220;brigens gibt es auch <a href="http://www.phphatesme.com/blog/allgemein/mikro-optimierung/">bei PHP hates me einen Artikel dazu</a>.</p>
<p>&#8212;<br />
Foto: <a href="http://www.flickr.com/photos/fabiovenni/264808733/">Old street at the speed of light</a> von <a href="http://www.flickr.com/photos/fabiovenni/">fabbio</a></p>
<hr /><small>&copy; <a href="http://www.ajaveeb.de/">Benjamin Hofmann</a> (ID:  f3d8e0b3cf4b39ca430ffe4e706e912c)</small><br /><a href="http://ajaveeb.de/mikro-optimierungen-701#comments">1 Kommentare</a> &middot; <a href="http://ajaveeb.de/mikro-optimierungen-701">Permalink</a>]]></content:encoded>
			<wfw:commentRss>http://ajaveeb.de/mikro-optimierungen-701/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IPC 2009 &#8211; Tag 1</title>
		<link>http://ajaveeb.de/ipc-2009-tag-1-674</link>
		<comments>http://ajaveeb.de/ipc-2009-tag-1-674#comments</comments>
		<pubDate>Sun, 22 Nov 2009 18:25:38 +0000</pubDate>
		<dc:creator>Benni</dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Karlsruhe]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP Conference]]></category>

		<guid isPermaLink="false">http://ajaveeb.de/?p=674</guid>
		<description><![CDATA[Hiermit will ich einen Einblick in die Sessions des ersten Tages der IPC 2009 und der Ergebnisse davon geben.]]></description>
			<content:encoded><![CDATA[<p class="mainimage"><img src="http://img.ajaveeb.de/7b8bf9aff9f753706d26ed86cfc8315d.jpg" alt="IPC 2009 &#8211; Tag 1" width="596" height="298" /></p><p style="font-weight:bold">Hiermit will ich einen Einblick in die Sessions des ersten Tages der IPC 2009 und der Ergebnisse davon geben.</p><p>Da ich, wie ich bereits geschrieben habe, p&#252;nktlich angekommen bin habe ich die Er&#246;ffnungssession auch noch mitbekommen, die einen kleinen Einblick in das vielf&#228;ltige Programm der International <a href="http://ajaveeb.de/tags/php-conference" class="st_tag internal_tag" rel="tag" title="Posts tagged with PHP Conference">PHP Conference</a> und der webtech gab. Kurz darauf ging es dann auch schon mit der Session &#8220;<a href="http://ajaveeb.de/tags/design-patterns" class="st_tag internal_tag" rel="tag" title="Posts tagged with Design Patterns">Design Patterns</a>&#8221; von Cal Evans bei mir los und das war genau richtig als Einstimmung auf die n&#228;chsten drei Tage.</p>
<h2><a href="http://ajaveeb.de/tags/design-patterns" class="st_tag internal_tag" rel="tag" title="Posts tagged with Design Patterns">Design Patterns</a> von Cal Evans</h2>
<p>Gestartet hat die Session direkt mit einer Buchempfehlung: &#8220;<a href="http://ajaveeb.de/tags/design-patterns" class="st_tag internal_tag" rel="tag" title="Posts tagged with Design Patterns">Design Patterns</a>&#8221; von der Gang Of Four. Anschlie&#223;end ging er dann gro&#223;teils auf das MVC-Pattern ein und hat dessen richtige Verwendung erkl&#228;rt, z.B. sollte ein Model niemals direkt auf eine Datenbank abbilden, da die Datenquellen eines Models wesentlich vielf&#228;ltiger sein k&#246;nnen. Sie k&#246;nnen neben Datenbanken auch auf Webservices, etc. zugreifen und ihre Daten von dort beziehen.</p>
<p>Controller sollten ebenfalls keine gro&#223;en Logiken beinhalten, sondern nur daf&#252;r Sorge tragen, dass die Daten vom Model zum View und umgekehrt gelangen. Jedoch sollten im Controller die Exceptions gefangen werden. Das Stichwort, welches ich vor kurzem dazu gelernt habe, nennt sich &#8220;Fat Model, Tiny Controller&#8221;.</p>
<p>Der View sollte logischerweise keine Logiken enthalten, sondern nur f&#252;r die Darstellung sorgen. Daf&#252;r kann er, wenn n&#246;tig, auch direkt auf das Model zugreifen, darf jedoch keine Daten schreiben, sondern nur lesen.</p>
<p>Abgesehen davon ist er noch auf das Decorator Pattern eingegangen, welches anstatt multipler Vererbungen verwendet werden sollte, da man damit wesentlich flexibler ist.</p>
<h2>NetBeans IDE von Petr Pisl</h2>
<p>Die zweite Session stand ganz im Zeichen der aktuellen Betaversion von NetBeans, einer schlanken, aber sehr m&#228;chtigen IDE f&#252;r die <a href="http://ajaveeb.de/tags/entwicklung" class="st_tag internal_tag" rel="tag" title="Posts tagged with Entwicklung">Entwicklung</a> in verschiedenen Programmiersprachen. Da es bei der IPC logischerweise um <a href="http://ajaveeb.de/tags/php" class="st_tag internal_tag" rel="tag" title="Posts tagged with PHP">PHP</a> geht wurden auch nur die neuen Features dieses Pakets abgehandelt.</p>
<p>So soll die neue Version nach Plan am 10.12.2009 erscheinen und viele neue F&#228;higkeiten besitzen. Die erste genannte war eine Codevervollst&#228;ndigung ohne PHPDoc. Daf&#252;r scannt NetBeans den Code und versucht anhand verschiedener Indikatoren herauszufinden, was die Methoden und Funktionen f&#252;r R&#252;ckgabewerte liefern. Auch soll PHPDoc nun eine Code-Completion erhalten, ebenso wie einzelne Elemente eines Arrays oder auch SQL, welches in Strings vorkommt. Man kann nun auch bestimmte Ordner aus dem Index f&#252;r die Vervollst&#228;ndigung herausnehmen.</p>
<p>Abgesehen von diesen Features, die ich enorm spannend finde soll auch das Erstellen von Unit-Tests sehr einfach werden und die Ausf&#252;hrung dieser ebenso. Das Handling dieses Features erinnert mich stark an Zend Studio for Eclipse, wo das auch m&#246;glich ist.</p>
<h2>Continuous Integration von Stefan Priebsch und Sebastian Bergmann</h2>
<p>Diese Session war f&#252;r mich extrem interessant, da ich mit diesem Thema noch nicht wirklich in Ber&#252;hrung gekommen bin. Die ersten Aussagen der beiden hat auch direkt beinhaltet, dass man unbedingt automatische Tests durchlaufen lassen soll und mindestens einmal t&#228;glich den aktuellen Stand zu integrieren, also zu committen.</p>
<p>Anschlie&#223;end wurde der Wert von Continuous Integration angesprochen, der sehr hoch ist. Durch dieses Verfahren verringert man Risiken und reduziert gleiche Prozesse, da nicht &#252;berall die gleiche Software installiert werden muss. Abgesehen davon erzeugt man deploybare Software, sorgt f&#252;r gr&#246;&#223;eres Vertrauen in den eigenen Code und die Sichtbarkeit eines Projektes wird erh&#246;ht, da jeder immer den aktuellsten Stand einsehen kann.</p>
<p>Um mit diesem Verfahren starten zu k&#246;nnen muss man zuerst einmal die Prozesse herausfinden, die automatisiert werden k&#246;nnen. Hieraus soll dann ein &#8220;Non-Event&#8221; gemacht werden, was im Klartext bedeutet, dass es sehr einfach sein soll diesen Prozess auszuf&#252;hren, z.B. durch einen Klick auf einen Button oder ein kleines Skript.</p>
<p>Zuletzt wurden dann noch diverse Tools vorgestellt, die man nutzen kann und die ich hier einfach nur auflisten will, da ich mich damit noch nicht weiter besch&#228;ftigt habe: CruiseControl, phpUnderControl, Hudson, Atlassian Bamboo und Arbit.</p>
<h2>Event Driven Architectures von Benjamin Eberlei</h2>
<p><a href="http://ajaveeb.de/tags/php" class="st_tag internal_tag" rel="tag" title="Posts tagged with PHP">PHP</a> an sich unterst&#252;tzt nur bedingt Events, da es eine request-basierte Sprache ist. Jedoch gibt es zwei Patterns, die man nutzen kann, um so eine Architektur zu bilden: Das Observer-Pattern und das Event-Dispatcher-Pattern.</p>
<p>Doch auch dies reicht noch nicht aus, um auf Events reagieren zu k&#246;nnen. Dazu sind weitere Tools notwendig, wie z.B. XMPP, dropr oder Gearman. Erst durch diese wird es m&#246;glich auch asynchron mit <a href="http://ajaveeb.de/tags/php" class="st_tag internal_tag" rel="tag" title="Posts tagged with PHP">PHP</a> arbeiten zu k&#246;nnen. Von diesen drei Tools hat Benjamin noch Gearman etwas weiter vorgestellt, welches durch seine einfache Nutzung bei mir punkten konnte.</p>
<h2>Wer langsam ist verliert von Dr. Johannes Mainusch</h2>
<p>Diese Session war von der webtech und sehr interessant. Es wurde davon berichtet, welche Ziele sich XING gesetzt hat und wie sie es geschafft haben diese zu erreichen.</p>
<p>Die Performance von Websites ist sehr wichtig und jede Seite sollte innerhalb von zwei Sekunden komplett geladen werden, da ein Mensch in dieser Zeit eine Reaktion erwartet. Wenn nichts voran geht kommt Frustration auf und die Plattform wird verlassen. Diese Nutzer kommen auch meist nicht wieder. Dabei macht die Zeit, die der Server f&#252;r die Datenverarbeitung ben&#246;tigt, meist nur einen kleinen Teil aus, der gr&#246;&#223;te Teil findet jedoch auf dem Weg vom Server zum Nutzer statt.</p>
<p>Um hier f&#252;r mehr Geschwindigkeit zu sorgen ist es erstmal wichtig die Engp&#228;sse zu finden. Wie gro&#223; sind die ausgelieferten Dateien, werden diese vom Browser gecached, gibt es langsame Requests usw. Hat man hier alles identifiziert kann mit der <a href="http://ajaveeb.de/tags/optimierung" class="st_tag internal_tag" rel="tag" title="Posts tagged with Optimierung">Optimierung</a> begonnen werden. Man kann dann anfangen Dateien zusammenzufassen, das Caching f&#252;r den Browser zu beeinflussen usw.</p>
<h2>Fazit</h2>
<p>Alle diese Sessions waren sehr interessant und ich bereue es nicht andere Sessions besucht zu haben. Es waren viele spannende Themen von kompetenten Speakern, die zumindest mir einige neue Erkenntnisse gebracht haben.</p>
<p>&#8212;<br />
Foto: <a href="http://www.flickr.com/photos/mor10am/4115624727/">IPC 2009</a> von <a href="http://www.flickr.com/photos/mor10am/">mor10am</a></p>
<hr /><small>&copy; <a href="http://www.ajaveeb.de/">Benjamin Hofmann</a> (ID:  f3d8e0b3cf4b39ca430ffe4e706e912c)</small><br /><a href="http://ajaveeb.de/ipc-2009-tag-1-674#comments">2 Kommentare</a> &middot; <a href="http://ajaveeb.de/ipc-2009-tag-1-674">Permalink</a>]]></content:encoded>
			<wfw:commentRss>http://ajaveeb.de/ipc-2009-tag-1-674/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Neues Feature im Blog: Planet</title>
		<link>http://ajaveeb.de/neues-feature-im-blog-planet-252</link>
		<comments>http://ajaveeb.de/neues-feature-im-blog-planet-252#comments</comments>
		<pubDate>Wed, 27 Aug 2008 21:39:39 +0000</pubDate>
		<dc:creator>Benni</dc:creator>
				<category><![CDATA[Beiträge]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.ajaveeb.de/?p=252</guid>
		<description><![CDATA[Seit gestern gibt es ein neues Feature hier im Blog. Einen Planet.]]></description>
			<content:encoded><![CDATA[<p class="mainimage"><img src="http://img.ajaveeb.de/cfd94f9c56f3eea16c80a645a227ff24.jpg" alt="Neues Feature im Blog: Planet" width="596" height="298" /></p><p style="font-weight:bold">Seit gestern gibt es ein neues Feature hier im Blog. Einen Planet.</p><p>Gestern habe ich mich mal damit befasst ein lange von mir geplantes Feature umzusetzen, n&#228;mlich die Aggregation und Anzeige von interessanten Artikeln, die ich in meinem <a href="http://www.ajaveeb.de/artikel/tiny-tiny-rss-180/">Feedreader</a> lese.</p>
<p>Dabei ist nun <a href="http://www.ajaveeb.de/planet/">diese Seite</a> entstanden, die genau das macht. Die Technik dahinter ist noch sehr simpel gehalten und auch noch nicht ganz so performant wie ich das gerne h&#228;tte, aber daf&#252;r finde ich auch noch eine L&#246;sung in den n&#228;chsten Tagen. Dann folgt auch eine weitere Erkl&#228;rung, wie das geschieht und welche Technologien eingesetzt werden.</p>
<p>Und dann noch eine Sache. Sollten auf dieser Seite Artikel angezeigt werden, die dort nicht gew&#252;nscht sind kann man mich bequem &#252;ber <a href="http://www.ajaveeb.de/impressum/#contact">mein Kontaktformular</a> erreichen. Ich werde diesen Artikel dann selbstverst&#228;ndlich aus der Aggregation entfernen.</p>
<p>&#8212;<br />
Foto: <a href="http://www.flickr.com/photos/stollerdos/255960893/">Notting Hill garden little planet</a></p>
<hr /><small>&copy; <a href="http://www.ajaveeb.de/">Benjamin Hofmann</a> (ID:  f3d8e0b3cf4b39ca430ffe4e706e912c)</small><br /><a href="http://ajaveeb.de/neues-feature-im-blog-planet-252#comments">0 Kommentare</a> &middot; <a href="http://ajaveeb.de/neues-feature-im-blog-planet-252">Permalink</a>]]></content:encoded>
			<wfw:commentRss>http://ajaveeb.de/neues-feature-im-blog-planet-252/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gravatars oder Favatars?</title>
		<link>http://ajaveeb.de/gravatars-oder-favatars-22</link>
		<comments>http://ajaveeb.de/gravatars-oder-favatars-22#comments</comments>
		<pubDate>Mon, 18 Feb 2008 19:51:10 +0000</pubDate>
		<dc:creator>Benni</dc:creator>
				<category><![CDATA[Beiträge]]></category>
		<category><![CDATA[Favatar]]></category>
		<category><![CDATA[Gravatar]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.ajaveeb.de/beitraege/gravatars-oder-favatars-22/</guid>
		<description><![CDATA[Jeder Blogger kennt sie, die Globally Recognized Avatars oder kurz Gravatars. Viele setzen sie auch in ihrem eigenen Blog ein, da sie ein einfach Mittel darstellen Kommentatoren durch die verschiedenen Blogs hinweg wiederzuerkennen. Und seitdem Automattic Gravatar.com gekauft hat wird sogar meiner &#252;berall dargestellt, da sich die Performance enorm gesteigert hat. Aber es gibt auch [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder Blogger kennt sie, die <a href="http://site.gravatar.com/">Globally Recognized Avatars oder kurz Gravatars</a>. Viele setzen sie auch in ihrem eigenen Blog ein, da sie ein einfach Mittel darstellen Kommentatoren durch die verschiedenen Blogs hinweg wiederzuerkennen. Und <a href="http://blog.helmschrott.de/quickblog/automattic-kauf-gravatarcom">seitdem Automattic Gravatar.com gekauft</a> hat wird sogar meiner &#252;berall dargestellt, da sich die Performance enorm gesteigert hat.</p>
<p>Aber es gibt auch eine Alternative zu den kleinen Bildchen. N&#228;mlich noch kleinere Bildchen: Favatars. Hierf&#252;r gibt es <a href="http://dev.wp-plugins.org/wiki/favatars">f&#252;r WordPress ein kleines Plugin</a>, welches sich ganz frech die Favicons der Sites, die einen Track-, bzw. Pingback senden oder deren Autor einen Link hinterl&#228;sst, schnappt und dort anzeigt, wo man es gerne h&#228;tte.</p>
<p>Ersteres hat sich bereits zum gro&#223;en Teil durchgesetzt, aber wer aus der Masse stechen will sollte sich f&#252;r Letzteres entscheiden oder wie hier nichts dergleichen anzeigen. Ein Problem gibt es mit den Favatars jedoch: Wenn sie so eingebunden sind wie beim <a href="http://www.drweb.de/weblog/weblog/">Dr. Web Weblog</a> erzeugt jeder Seitenaufruf eines Eintrags einen Aufruf des Favicons. Das w&#228;re nicht weiter schlimm, soll ja auch so sein. Doch wer kein Favicon sein Eigen nennt wird mit der Auswertung seiner Serverlogs nicht mehr froh, da es jedes mal zu einem Fehler 404 kommt.</p>
<hr /><small>&copy; <a href="http://www.ajaveeb.de/">Benjamin Hofmann</a> (ID:  f3d8e0b3cf4b39ca430ffe4e706e912c)</small><br /><a href="http://ajaveeb.de/gravatars-oder-favatars-22#comments">0 Kommentare</a> &middot; <a href="http://ajaveeb.de/gravatars-oder-favatars-22">Permalink</a>]]></content:encoded>
			<wfw:commentRss>http://ajaveeb.de/gravatars-oder-favatars-22/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

