<?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>TYPO3 Blogger &#187; Performance</title>
	<atom:link href="http://typo3blogger.de/category/typo3-performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://typo3blogger.de</link>
	<description>TYPO3 News, Development &#38; Insider Infos</description>
	<lastBuildDate>Tue, 22 May 2012 19:04:05 +0000</lastBuildDate>
	<language>de-de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>TypoScript externe Bilder cachen &#8211; Türchen 10</title>
		<link>http://typo3blogger.de/typoscript-externe-bilder-cachen-turchen-10/</link>
		<comments>http://typo3blogger.de/typoscript-externe-bilder-cachen-turchen-10/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 07:00:23 +0000</pubDate>
		<dc:creator>Hendrik Reimers</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[TypoScript]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=6852</guid>
		<description><![CDATA[Dies ist ein Gastbeitrag von Hendrik Reimes. Auch hier gilt wieder Tutorial != Beispiel. Das Beispiel zeigt, wie mit einer User Funktion und ein wenig TypoScript externe Bilder für eine gewisse Zeit gecacht werden können. Die UserFunction kümmert sich um das Caching selbst und das TypoScript gibt das eigentliche Bild aus. Für das Beispiel wird [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Dies ist ein Gastbeitrag von Hendrik Reimes. Auch hier gilt wieder Tutorial != Beispiel. Das Beispiel zeigt, wie mit einer User Funktion und ein wenig TypoScript externe Bilder für eine gewisse Zeit gecacht werden können. Die UserFunction kümmert sich um das Caching selbst und das TypoScript gibt das eigentliche Bild aus. Für das Beispiel wird zudem die <a href="http://typo3.org/extensions/repository/view/ts_select/current/" target="_blank">ts_select</a>-Extension benötigt. Fragen könnt ihr wie immer in den Kommentaren stellen.<span id="more-6852"></span></p>
<p>UserFunction:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> user_getextimage <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">function</span> main<span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #339933;">,</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$targetFile</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'targetPath'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #990000;">hash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'adler32'</span><span style="color: #339933;">,</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fileExt'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #000088;">$targetFile</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'targetPath'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;.&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fileExt'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Wenn Datei noch nicht zu alt ist gleich zurückliefern anstatt neu laden
</span>    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$targetFile</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$lastModified</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$targetFile</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$currentTime</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$lastModified</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$conf</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheTimeout'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$currentTime</span> <span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$targetFile</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// Anfrage ausfuehren und ausgeben</span>
    <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$targetFile</span><span style="color: #339933;">,</span>t3lib_div<span style="color: #339933;">::</span><span style="color: #004000;">getUrl</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// PFad liefern</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$targetFile</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Setup:</p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tx_tsselect_pi1<span style="color: #339933; font-weight: bold;">.</span>objList<span style="color: #339933; font-weight: bold;">.</span>imageTest<span style="color: #339933; font-weight: bold;">.</span>title <span style="color: #339933; font-weight: bold;">=</span> Image Test
<span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tx_tsselect_pi1<span style="color: #339933; font-weight: bold;">.</span>objList<span style="color: #339933; font-weight: bold;">.</span>imageTest<span style="color: #339933; font-weight: bold;">.</span>cObject <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #990000; font-weight: bold;">IMAGE</span>
<span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tx_tsselect_pi1<span style="color: #339933; font-weight: bold;">.</span>objList<span style="color: #339933; font-weight: bold;">.</span>imageTest<span style="color: #339933; font-weight: bold;">.</span>cObject <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">file</span><span style="color: #339933; font-weight: bold;">.</span>import<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">stdWrap</span><span style="color: #339933; font-weight: bold;">.</span>cObject <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #990000; font-weight: bold;">USER</span>
  <span style="color: #000066; font-weight: bold;">file</span><span style="color: #339933; font-weight: bold;">.</span>import<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">stdWrap</span><span style="color: #339933; font-weight: bold;">.</span>cObject <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">includeLibs</span> <span style="color: #339933; font-weight: bold;">=</span> fileadmin<span style="color: #339933; font-weight: bold;">/</span><span style="color: #000066; font-weight: bold;">user_getextimage</span><span style="color: #339933; font-weight: bold;">/</span><span style="color: #000066; font-weight: bold;">user_getextimage</span><span style="color: #339933; font-weight: bold;">.</span>class<span style="color: #339933; font-weight: bold;">.</span>php
    <span style="color: #ed7d14;">userFunc</span>   <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #000066; font-weight: bold;">user_getExtImage</span>-<span style="color: #339933; font-weight: bold;">&gt;</span>main
&nbsp;
    url          <span style="color: #339933; font-weight: bold;">=</span> http<span style="color: #339933; font-weight: bold;">:</span><span style="color: #aaa; font-style: italic;">//lorempixel.com/450/350/</span>
&nbsp;
    targetPath   <span style="color: #339933; font-weight: bold;">=</span> fileadmin<span style="color: #339933; font-weight: bold;">/</span><span style="color: #000066; font-weight: bold;">user_getextimage</span><span style="color: #339933; font-weight: bold;">/</span>
    fileExt      <span style="color: #339933; font-weight: bold;">=</span> jpg
    filename     <span style="color: #339933; font-weight: bold;">=</span> extImage
    cacheTimeout <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">300</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000066; font-weight: bold;">file</span><span style="color: #339933; font-weight: bold;">.</span>maxW <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">150</span>
  <span style="color: #000066; font-weight: bold;">file</span><span style="color: #339933; font-weight: bold;">.</span>maxH <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">150</span>
&nbsp;
  <span style="font-weight: bold;">imageLinkWrap</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
  <span style="font-weight: bold;">imageLinkWrap</span><span style="color: #339933; font-weight: bold;">.</span>enable <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
  <span style="font-weight: bold;">imageLinkWrap</span><span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">typolink</span> <span style="color: #009900;">&#123;</span>
    parameter<span style="color: #339933; font-weight: bold;">.</span>cObject <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tx_tsselect_pi1<span style="color: #339933; font-weight: bold;">.</span>objList<span style="color: #339933; font-weight: bold;">.</span>imageTest<span style="color: #339933; font-weight: bold;">.</span>cObject<span style="color: #339933; font-weight: bold;">.</span>file<span style="color: #339933; font-weight: bold;">.</span>import<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">stdWrap</span><span style="color: #339933; font-weight: bold;">.</span>cObject
    ATagParams <span style="color: #339933; font-weight: bold;">=</span> class<span style="color: #339933; font-weight: bold;">=</span>&quot;lightbox&quot; rel<span style="color: #339933; font-weight: bold;">=</span>&quot;lightbox<span style="color: #009900;">&#91;</span>galerie<span style="color: #009900;">&#93;</span>&quot;
  <span style="color: #009900;">&#125;</span>
&nbsp;
  wrap <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #339933; font-weight: bold;">|</span><span style="color: #3366CC;">&lt;br /&gt;</span>Source from<span style="color: #339933; font-weight: bold;">:</span> http<span style="color: #339933; font-weight: bold;">:</span><span style="color: #aaa; font-style: italic;">//lorempixel.com/</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/typoscript-externe-bilder-cachen-turchen-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sicherheitskonzepte Hosting</title>
		<link>http://typo3blogger.de/sicherheitskonzepte-hosting/</link>
		<comments>http://typo3blogger.de/sicherheitskonzepte-hosting/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 12:50:00 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/sicherheitskonzepte-hosting/</guid>
		<description><![CDATA[Florian und Mirko von Mittwald haben Sicherheitskozepte für TYPO3 Hosting vorgestellt. Nach ein paar Mittwald Facts, ab ins Thema&#8230; Begonnen bei der Systemsicherheit vielen Schlagwörter wie CHROOT-Technik, detailliertes Monitoring, Linux (monolithische Kernal) und Anonymisierung nach draußen. Das Kundencenter soll natürlich dem Kunden helfen die Features zu benutzen. Der Softwaremanager bietet Ein-Klick-Installationen mit den benötigten Komponenten, [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Florian und Mirko von Mittwald haben Sicherheitskozepte für TYPO3 Hosting vorgestellt. Nach ein paar Mittwald Facts, ab ins Thema&#8230;</p>
<p>Begonnen bei der Systemsicherheit vielen Schlagwörter wie CHROOT-Technik, detailliertes Monitoring, Linux (monolithische Kernal) und Anonymisierung nach draußen. Das Kundencenter soll natürlich dem Kunden helfen die Features zu benutzen. Der Softwaremanager bietet Ein-Klick-Installationen mit den benötigten Komponenten, der Versionsmanager die passenden Updates.</p>
<p>Sicherheits-Services werden im Hintergrund automatisch durchgeführt (das betrifft z.B. Sicherheitspatches und Wartung-E-Mails). Der Wiederherstellungsmanager bietet die Möglichkeit alte Zustände wiederherzustellen. Alle Aktionen werden mit E-Mails bestätigt.</p>
<p>Leider gab es wenig Informationen zu sicherem Hosting(habe mir technische Details gewünscht <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ), sondern es war mehr eine Verkaufssession. Dennoch einige interssante Funktionen welche man gerne bei einem Hoster sieht.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/sicherheitskonzepte-hosting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prepared Statement</title>
		<link>http://typo3blogger.de/prepared-statement/</link>
		<comments>http://typo3blogger.de/prepared-statement/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 20:46:30 +0000</pubDate>
		<dc:creator>Stefan Frömken</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=6121</guid>
		<description><![CDATA[Bei der Einführung von TYPO3 4.5 Mitte Januar wurden die neuen Prepared-Statements schon angekündigt. In dem SlideShare von Patrick Lobacher werden diese besonderen Queries als deutlich optimierte Datenbankabfragen angepriesen. Bei der Googlesuche nach &#8220;prepare_SELECTquery&#8221; habe ich nur 160 Ergebnisse und eine Suche hier bei typo3blogger resultiert in einem leeren Ergebnis. Ich denke wir sollten da [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Bei der Einführung von TYPO3 4.5 Mitte Januar wurden die neuen Prepared-Statements schon angekündigt. In dem <a title="Die TYPO3 4.5 Neuerungen auf einen Blick" href="http://www.slideshare.net/plobacher/typo3-45-lts-die-neuerungen-auf-einen-blick" target="_blank">SlideShare von Patrick Lobacher</a> werden diese besonderen Queries als deutlich optimierte Datenbankabfragen angepriesen. Bei der Googlesuche nach &#8220;prepare_SELECTquery&#8221; habe ich nur 160 Ergebnisse und eine Suche hier bei typo3blogger resultiert in einem leeren Ergebnis. Ich denke wir sollten da mal ein bisschen Licht rein bringen.<br />
<span id="more-6121"></span><br />
Was aber ist der Unterschied zwischen normalen SELECT- und diesen PREPARED-Abfragen? Zu allererst sollte man wissen, was der MySQL-Server mit einer SELECT-Abfrage macht. Diese Abfragen werden nicht einfach ausgeführt sondern müssen erst durch die verschiedenen Arbeitsschritten von Parsern und Optimierern.</p>
<p>Wenn es Euch interessiert könnt Ihr Euch über die Shell mit dem mysql-Befehl auf den Server einloggen und das Profiling aktivieren:</p>
<p><code>SET profiling = 1;</code></p>
<p>Alle nun über die MySQL-Shell eingegebenen Abfragen werden protokolliert und können sehr detailliert analysiert werden. Mach nun mal ein einfaches SELECT auf die fe_users:</p>
<p><code>SELECT * FROM fe_users;</code></p>
<p>Führt danach direkt noch diesen Befehl aus:</p>
<p><code>SHOW profile CPU FOR QUERY 1;</code></p>
<p>In dieser Aufstellung seht Ihr nun, wie lange der MySQL-Server für jede durchgeführte Aufgabe gebraucht hat. Bei mir sind es 16 Aufgaben, die der Server abarbeiten musste. Nun stellt Euch mal folgendes PHP-Konstrukt vor, dass alle Inhaltselemente zu den entsprechenden Seiten raussucht:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec_SELECTquery</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'SQL_NO_CACHE uid, title'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'pages'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'1=1 '</span> <span style="color: #339933;">.</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enableFields</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pages'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;p&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':&lt;/p&gt;&lt;ul&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$res2</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec_SELECTquery</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'SQL_NO_CACHE uid, header'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'tt_content'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'pid = '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'uid'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'
		'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enableFields</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tt_content'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$res2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;li&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/li&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/ul&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Solche Konstrukte findet man immer wieder in Extensions vor. Allerdings wird hier für jede Seite eine neue Anfrage an den Server gesendet. Zwar hat der MySQL-Server einen Cache, auf den er zugreifen kann, aber bis zu dieser Entscheidung muss der MySQL-Server immer wieder bestimmte Aufgaben zwecks Überprüfung durchführen.</p>
<p>Mit den nun eingeführten PREPARED-Abfragen, können wir dem MySQL-Server eine vorbereitete Abfrage mit Platzhaltern senden. Diese Abfrage wird EINMAL vom Server verarbeitet und alle Abfragen danach (mit unterschiedlichen Platzhaltern) können direkt und OHNE weitere Operationen und Parsen abgearbeitet werden. Statt den vorherigen 16 Aufgaben müssen nun vielleicht nur noch 6 oder 8 Aufgaben ausgeführt werden. Dieser Wegfall von Aufgaben wirkt sich natürlich positiv auf die Verarbeitungszeit aus.</p>
<p>TYPO3 bringt seit der 4.5er Version eine neue Klasse &#8220;class.t3lib_db_preparedstatement.php&#8221; mit, mit der diese vorbereiteten Abfragen realisiert werden können. Doch Achtung! Schaut Euch die Datei mal an. Überall sind Verweise auf die ganz normalen SELECT-Methoden der t3lib_db zu finden. Wie kann das also schneller sein? Die Antwort ist einfach: Gar nicht! Ich habe es mehrfach getestet. Aber ein Eintrag in der TYPO3-Dev-Liste lässt hoffen. Ich habe erfahren, dass TYPO3 wohl in Zukunft auf mysqli wechseln möchte. Diese Objektorientierte Art des MySQL-Zugriffs bringt unteranderem auch Methoden mit, um diese PREPARED-Statements zu verarbeiten. Die neue TYPO3-Klasse ist derzeit also nur ein Dummy und wird, wenn es dann mal so weit ist auch tatsächlich einen Performanceschub bringen.</p>
<p>Hier mal das gleiche Beispiel von oben auf Basis von PREPARED-Statements:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'PREPARE contentStmt FROM &quot;
	SELECT SQL_NO_CACHE uid, header
	FROM tt_content
	WHERE pid = ? '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enableFields</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tt_content'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'
&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec_SELECTquery</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'SQL_NO_CACHE uid, title'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'pages'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'1=1 '</span> <span style="color: #339933;">.</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cObj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enableFields</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pages'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//t3lib_div::devLog('db', 'db', -1, array($res));</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;p&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':&lt;/p&gt;&lt;ul&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SET @uid = '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'uid'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$res2</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'
		EXECUTE contentStmt USING @uid;
	'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$res2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;li&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/li&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/ul&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DEALLOCATE PREPARE contentStmt'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ihr seht, dass prepare_SELECTquery ein Object und nicht mehr einen MySQL-Link zurück gibt. Ansonsten bleiben die übergebenen Variablen für fields, table und where nahezu gleich. Bis auf den Punkt in der WHERE-Clause: Hier könnt Ihr nun mit dem Doppelpunkt-Parameter Platzhalter definieren, die Ihr später mal ersetzen wollt (:uid). Später könnt Ihr mit der Methode &#8220;execute()&#8221; diese Doppelpunkt-Platzhalter mit Werten ersetzen und die Daten mit der Methode &#8220;fetch()&#8221; abrufen. Alle vorbereiteten Abfragen werden im MySQL-Cache vorbehalten und nehmen Platz im Speicher ein. Um diesen wieder freizugeben solltet Ihr mit der Methode &#8220;free()&#8221; diesen Platz wieder freigeben.</p>
<p>An dieser Stelle will ich Euch noch einen Punkt beschreiben mit dem man wirklich mal Speed in seine Abfragen reinbringen kann. Ich möchte Euch aber auch noch darauf aufmerksam machen, dass diese hier gezeigte Variante nicht DBAL kompatibel ist:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>sql_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'PREPARE contentStmt FROM &quot;
SELECT SQL_NO_CACHE uid, header
FROM tt_content
WHERE pid = ? '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cObj<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>enableFields<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tt_content'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'
&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>exec_SELECTquery<span style="color: #009900;">&#40;</span>
<span style="color: #0000ff;">'SQL_NO_CACHE uid, title'</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">'pages'</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">'1=1 '</span> <span style="color: #339933;">.</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>cObj<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>enableFields<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pages'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//t3lib_div::devLog('db', 'db', -1, array($res));</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>sql_fetch_assoc<span style="color: #009900;">&#40;</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&amp;lt;p&amp;gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">':&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>sql_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SET @uid = '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'uid'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$res2</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>sql_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'
EXECUTE contentStmt USING @uid;
'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>sql_fetch_assoc<span style="color: #009900;">&#40;</span><span style="color: #000088;">$res2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&amp;lt;li&amp;gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&amp;lt;/li&amp;gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$content</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&amp;lt;/ul&amp;gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$GLOBALS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TYPO3_DB'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>sql_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DEALLOCATE PREPARE contentStmt'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>So werden irgendwann mal die von TYPO3 verarbeiteten Abfragen aussehen. Ich habe diese drei Abfragen mal in einer Extension zusammengeschnürt: http://typo3.sfroemken.de/?id=213. Evtl. werdet Ihr bemerken, dass die PREPARED-Queries bei wenigen Durchläufen nicht wirklich Speed bringen. Jeder SQL-Befehl, der zum Server gesendet werden muss braucht Zeit. Einmal für die PREPARED-Query und einmal für den eigentlichen SELECT-Query. Verwendet also bitte nicht für jeden SELECT die PREPARED-Statements. Setzt Sie bitte nur dann ein, wenn Ihr mehrere ähnliche SELECTs absetzen müsst. Erst dann entfaltet sich die wahre Performance. Bei einer Indexierung von über 50.000 Datensätzen konnte ich über 30% Geschwindigkeit rausholen.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/prepared-statement/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gedanken zu einer großen TYPO3 Server Installation</title>
		<link>http://typo3blogger.de/gedanken-zu-einer-grossen-typo3-server-installation/</link>
		<comments>http://typo3blogger.de/gedanken-zu-einer-grossen-typo3-server-installation/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 16:29:04 +0000</pubDate>
		<dc:creator>Thomas Wittek</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=5874</guid>
		<description><![CDATA[Wenn man eine grosse TYOPO3 Instanz mit mehreren Domains (&#62; 20) und vielen GB Daten performant im Web präsentieren will gibt es einiges zu beachten. Nun möchte ich mal eine möglich Serverarchitektur vorstellen. Diese hat keinen Anspruch auf Vollständigkeit und Richtigkeit und sollte nicht als der Weisheit letzter Schluss gesehen werden. Gerne freu&#8217; ich mich [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Wenn man eine grosse TYOPO3 Instanz mit mehreren Domains (&gt; 20) und vielen GB Daten performant im Web präsentieren will gibt es einiges zu beachten. Nun möchte ich mal eine möglich Serverarchitektur vorstellen. Diese hat keinen Anspruch auf Vollständigkeit und Richtigkeit und sollte nicht als der Weisheit letzter Schluss gesehen werden. Gerne freu&#8217; ich mich über Kommentare dazu.</p>
<p><div id="attachment_5876" class="wp-caption aligncenter" style="width: 310px"><a href="http://typo3blogger.de/wp-content/uploads/2011/04/server_map.png"><img class="size-medium wp-image-5876" title="Server Map (Klick-Vergrößerung)" src="http://typo3blogger.de/wp-content/uploads/2011/04/server_map-300x294.png" alt="Server Map (Klick-Vergrößerung)" width="300" height="294" /></a><p class="wp-caption-text">Server Map (Klick-Vergrößerung)</p></div><span id="more-5874"></span></p>
<p><strong>Ein kurzer beschrieb zur Architektur:</strong><br />
Es gibt zwei DB Server. Einer physikalisch einer virtuell. Diesen könnten synchronisiert und als Backup zu dienen. Eine weitere Möglichkeit könnte auch ein Master / Slave Konzept sein. Dabei hinterlegt man zwei Datenverbindungen an sodass im Ausfall des Master Servers der Slave Server einspringt und die Verfügbarkeit sichert. Auf dem physikalischen DB Server könnte auch der Tomcat für die Solr Indizierung und andere Dienste und Datenbanken laufen.</p>
<p>Der VM1 ist ein virtueller Webserver wie Apache. Diesen Server könnte man beliebig für Testsysteme klonen und bei Bedarf skalieren oder gar in die Cloud auslagern.</p>
<p>Der VM2 ist ein virtueller Reverse Proxy in einer DMZ zwecks Sicherheit. Dort liegen gecachte Seiten um die Performance hoch zu halten.</p>
<p>Weitere zu beachtende Punkte:</p>
<ul>
<li>MySQL unterstützt nur einen Server mit Schreibmöglichkeiten, daher könnte Loadbalancing oder Hot-Standby sehr instabil werden.</li>
<li>Persistent Connect wäre hier gut um Performance Verluste zu vermeiden. Denn jeder neue Connect auf die DB kostet 20 ms. Im TYPO3 könnte das aber auch zu Problemen führen.</li>
<li>TYPO3 kann man technisch nicht komplett in Frontend und Backend aufteilen, da es überall Schnittstellen gibt. Das Frontend hat viele Gebiete in denen Inhalte geschrieben werden.</li>
<li>Gerne freu&#8217; ich mich über eure Erfahrungen mit großen TYPO3 Instanzen.</li>
</ul>
<p>Dies ist ein Gastbeitrag von Thomas Wittek für die “<a title="Alles muss raus…" href="http://typo3blogger.de/alles-muss-raus/">Alles muss raus</a>” Aktion.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/gedanken-zu-einer-grossen-typo3-server-installation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eine 404 Logfile kurz Übersicht..</title>
		<link>http://typo3blogger.de/eine-404-logfile-kurz-ubersicht/</link>
		<comments>http://typo3blogger.de/eine-404-logfile-kurz-ubersicht/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 12:44:47 +0000</pubDate>
		<dc:creator>Nikolas Hagelstein</dc:creator>
				<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=4717</guid>
		<description><![CDATA[..kann man sich recht einfach mit folgendem kleinen shell Kommando erzeugen: grep "404" /var/log/apache2/users/xyz-access.log &#124; cut -d' ' -f7 &#124; sort &#124; uniq -c &#124; sort -nr Das Ergebniss ist eine Liste aller Requests die einen 404 auslösen mit der jeweiligen Anzahl davor. Das Ganze nach Häufigkeit sortiert. Keine Raketentechnik, aber praktisch und daher worth [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>..kann man sich recht einfach mit folgendem kleinen shell Kommando erzeugen:<br />
<code><br />
grep "404" /var/log/apache2/users/xyz-access.log | cut -d' ' -f7 | sort | uniq -c | sort -nr<br />
</code></p>
<p>Das Ergebniss ist eine Liste aller Requests die einen 404 auslösen mit der jeweiligen Anzahl davor.<br />
Das Ganze nach Häufigkeit sortiert.</p>
<p>Keine Raketentechnik, aber praktisch und daher worth sharing <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Für den geneigten Leser:</p>
<ul>
<li>access.log nach 404 grepen</li>
<li>Zeile bei &#8216; &#8216; splitten und 7te spalte isolieren (bei anderem Logformat anpassen)</li>
<li>Sortieren</li>
<li>Gleiche Zeilen zusammenfassen und Zähler versehen</li>
<li>Nummerisch absteigend sortieren</li>
</ul>
<p>Wer sich das ganze gleich per Mail schicken lassen möchte, kann hinten noch ein <code>| sendmail abx@xyz.de</code> dranhängen.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/eine-404-logfile-kurz-ubersicht/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Neue Features in 4.3 &#8211; Teil 4</title>
		<link>http://typo3blogger.de/neue-features-in-4-3-teil-4/</link>
		<comments>http://typo3blogger.de/neue-features-in-4-3-teil-4/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 05:48:07 +0000</pubDate>
		<dc:creator>Georg Ringer</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[TypoScript]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=2544</guid>
		<description><![CDATA[Die beliebte Reihe wird fortgesetzt und nach Teil 3 werden auch im folgenden neue Features von TYPO3 4.3 vorgestellt. Update von Extensions verhindern (Extension Manager) Die Einstellung &#8220;excludeFromUpdates&#8221; mit dem Wert 1 in der Datei ext_emconf.php verhindert, dass diese Extension durch den Extension Manager aktualisiert werden kann. Besonders nützlich wenn man doch einmal den Code [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Die beliebte Reihe wird fortgesetzt und nach <a title="Teil 3 der Features von 4.3" href="http://typo3blogger.de/neue-features-in-4-3-teil-3/">Teil 3</a> werden auch im folgenden neue Features von TYPO3 4.3 vorgestellt.<span id="more-2544"></span></p>
<p><strong>Update von Extensions verhindern (Extension Manager)</strong></p>
<p>Die Einstellung &#8220;excludeFromUpdates&#8221; mit dem Wert 1 in der Datei ext_emconf.php verhindert, dass diese Extension durch den Extension Manager aktualisiert werden kann. Besonders nützlich wenn man doch einmal den Code einer Extension direkt verändert hat und ein Update mit anschließendem Verlust der eigenen Änderungen verhindern will. <a title="XCLASS &amp; Hooks" href="http://typo3blogger.de/alles-uber-hooks/">XCLASS und Hooks</a> sind natürlich dennoch vorzuziehen.</p>
<p><strong>Einstellung doNotLoadInFE (Programmierung)</strong></p>
<p>Ebenfalls in der Datei ext_emconf kann nun die Einstellung doNotLoadInFE gesetzt werden. Damit wird das Frontend etwas schneller, da nur noch die Extensions bzw. dessen ext_tables.php und ext_localconf.php-Einstellungen geladen werden, deren Wert nicht auf 1 gesetzt ist.</p>
<p><strong>Neuer TCA-Typ &#8220;suggest&#8221; (Programmierung)</strong></p>
<p>Nach langer Zeit im Bugtracker hat es auch dieses Feature in die 4.3. geschafft. Damit es sehr einfach möglich, ein Suggest/Autocomplete Feld im Backend zu generieren. Besonders nützlich wenn eine Verknüpfung zu einer Datenbanktabelle geschaffen werden soll, in der es viele Einträge gibt. Die Konfiguration findet entweder über das TCA oder über das Seiten TsConfig statt. Beispiel-Code:</p>
<blockquote>
<pre>$TCA['pages']['columns']['storage_pid']['config']['wizards']['suggest'] = array(
	'type' =&gt; 'suggest',
	'default' =&gt; array(
		'pidList' =&gt; '1,2,3,45',
	),
);</pre>
</blockquote>
<p><strong>cObject CONTENT erlaubt Aufruffe von den Tabellen static_ (TypoScript)</strong></p>
<p>Bis jetzt konnte mit dem cObj CONTENT nur folgende Tabellen abgefragt werden: pages, tt_content, fe_*, tx_*, tt_*, user_*. Jetzt ist auch static_ möglich.</p>
<p><strong>TS-Eigenschaft stripProfile (TypoScript)</strong></p>
<p>Die Eigenschaft stripProile erlaubt es bei den cObjects IMAGE/IMG_RESOURCE, dass beim Verkleinern die Bildprofile gelöscht werden. Damit werden die Bilder kleiner.  Mit der Einstellung &#8220;im_useStripProfileByDefault&#8221; kann dieses Feature im Extension Manager global aktiviert (und per TypoScript für bestimmte Fälle deaktiviert werden). Beispiel-Code:</p>
<blockquote><p>10 = IMAGE<br />
10.file = fileadmin/images/image1.jpg<br />
10.file.stripProfile = 1</p></blockquote>
<p><strong>t3editor mit auto complete (Backend)</strong></p>
<p>Wie bereits von Tobias Liebig erwähnt beherrscht der t3editor nun auch ein autocomplete &#8211; besonders fein für alle, die die TsRef noch immer nicht auswendig können <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/neue-features-in-4-3-teil-4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Neue Features in 4.3 &#8211; Teil 2</title>
		<link>http://typo3blogger.de/neue-features-in-4-3-teil-2/</link>
		<comments>http://typo3blogger.de/neue-features-in-4-3-teil-2/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 05:47:17 +0000</pubDate>
		<dc:creator>Georg Ringer</dc:creator>
				<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Releases]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[TypoScript]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=2525</guid>
		<description><![CDATA[Nach dem Teil 1 werden hier die nächsten Features vorgestellt. Viel Spaß beim Lesen.Auch die folgenden Dinge sind ab der Version 4.3. neu und erleichtern das Leben. Vergrößerbare Textareas (Backend) Alle Textareas, die über TCEforms gerendert werden, können nun über JavaScript vergrößert werden und zwar sowohl horizontal als auch vertikal. Zusätzlich verlängert sich der Eingabebereich [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Nach dem <a title="Neue Features in 4.3 - Teil 1" href="http://typo3blogger.de/neue-features-in-4-3/" target="_blank">Teil 1</a> werden hier die nächsten Features vorgestellt. Viel Spaß beim Lesen.<span id="more-2525"></span>Auch die folgenden Dinge sind ab der Version 4.3. neu und erleichtern das Leben.</p>
<p><strong>Vergrößerbare Textareas (Backend)</strong></p>
<p>Alle Textareas, die über TCEforms gerendert werden, können nun über JavaScript vergrößert werden und zwar sowohl horizontal als auch vertikal. Zusätzlich verlängert sich der Eingabebereich voll automatisch mit einem netten Effekt wenn eine neue Zeile hinzukommt. An dieser Stelle Danke an Steffen für die tolle Arbeit!</p>
<p><strong>Shortcuts deaktivierbar (Backend)</strong></p>
<p>Mit dem Code &#8220;options.enableShortcuts = 0&#8243; im User TsConfig lässt sich die Shortcut-Option deaktivieren. Das führt zu weniger Icons und sauberen Backend &#8211; sehr nützlich wenn man die Shortcuts nicht nützt.</p>
<p><strong>Versionierung &amp; Workspaces deaktivierbar (Backend)</strong></p>
<p>Seit 4.3. ist die Extension version keine Pflichtextension mehr und kann deaktiviert werden. Die Perfomance des Backends profitiert davon, da einige Queries weniger gesetzt werden müssen. Zum Aktivieren muss die Extension installiert werden bzw kann dies über den Update-Wizard erledigt werden.</p>
<p><strong>Ausgelagerte System-Extensions (Backend)</strong></p>
<p>Folgende Funktionalitäten wurden ebenso in System-Extensions ausgelagert und sind nun optional und über den Extension Manager deaktvierbar:</p>
<ul>
<li>Help&gt;About [about]:  Shows info about TYPO3 and installed extensions.</li>
<li>Help&gt;TYPO3 Manual [cshmanual]: Shows TYPO3 inline user manual.</li>
<li>Frontend Editing [feedit]: This module enables FE-editing, configuration is done by Typoscript.</li>
<li>User&gt;Open Documents [opendocs]: Handles the list of opened documents in TYPO3 backend.</li>
<li>Simulate Static URLs [simulatestatic]: If you do not want to use RealURL or CoolURI but still want the Speaking URL feature.</li>
</ul>
<p>Über den Update-Wizard können diese Extensions auch aktiviert werden.</p>
<p><strong>stdWrap mit cropHTML (TypoScript)</strong></p>
<p>Schon seit der Bier-Auktion auf der letzten T3BOARD ist dieses Feature fällig. Damit lässt sich endlich HTML-Code verkürzen ohne einen invaliden Code zu produzieren, da die HTML-Tags respektiert und wieder korrekt geschlossen werden.</p>
<p><strong>stdWrap für imageLinkWrap (TypoScript)</strong></p>
<p>Damit ist es möglich, Bilder zu überschreiben, beispielsweise für andere Bilder in einem Popup mit folgendem Code</p>
<blockquote><p>tt_content.image.20.1.imageLinkWrap.file.override.cObject {<br />
field = tx_alternateimages_image<br />
stdWrap {<br />
required = 1<br />
wrap = uploads/pics/|<br />
}<br />
listNum &lt; tt_content.image.20.1.imageLinkWrap.enable.ifEmpty.typolink.parameter.listNum<br />
}</p></blockquote>
<p><strong>Verbesserungen im Database-Analyser (Install-Tool)</strong></p>
<p>Mit der Version 4.3. gibt es eine Checkbox, um alle anderen Checkboxen zu aktivieren, man spart sich also jede Menge geklickse, auch dafür danke!</p>
<p><em><strong>Hinweis</strong>: Wer von weiteren Features weiß, die ich vielleicht vergessen könnte aber erwähnenswert sind, bitte einfach bei mir kurz melden &#8211; danke!</em></p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/neue-features-in-4-3-teil-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>TYPO3 auf Nginx</title>
		<link>http://typo3blogger.de/typo3-auf-nginx/</link>
		<comments>http://typo3blogger.de/typo3-auf-nginx/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 22:03:42 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=2446</guid>
		<description><![CDATA[Ich selber habe noch nicht so weit über die Grenzen des Apache hinaus geschaut. Nun bin ich aber Dank Michiel Roos auf Nginx (spricht &#8220;Engine-Ex&#8221;) gestoßen. Dies ist ein Webserver der laut Wikipedia deutliche mehr Power haben soll. Der Webserver ist andere strukturiert; Das dabei Probleme vorprogrammiert sind ist klar Auf typofree.org wurde nun erklärt [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Ich selber habe noch nicht so weit über die Grenzen des Apache hinaus geschaut. Nun bin ich aber Dank Michiel Roos auf Nginx (spricht &#8220;Engine-Ex&#8221;) gestoßen. Dies ist ein Webserver der laut <a href="http://de.wikipedia.org/wiki/Nginx" target="_self">Wikipedia</a> deutliche mehr Power haben soll. Der Webserver ist andere strukturiert; Das dabei Probleme vorprogrammiert sind ist klar <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Auf typofree.org wurde nun erklärt wie man TYPO3 <a href="http://www.typofree.org/article/archive/2009/august/title/running-typo3-on-nginx/" target="_self">auf das System bekommt</a> und die Performance weiter ausreißt indem man mit <a href="http://www.typofree.org/article/archive/2009/august/title/typo3-nginx-enable-gzip-and-expires-headers/" target="_blank">gzip / Header</a> arbeitet und den <a href="http://www.typofree.org/article/archive/2009/august/title/enabling-nc-staticfilecache-in-typo3-nginx/" target="_blank">Static File Cache aktiviert</a>. Wirklich gute Artikel. Ich werde mir den Webserver mal anschauen, kann aber (auch wenn er gut ist) nicht wechseln, weil ich da an meinen Hoster gebunden bin.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/typo3-auf-nginx/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>config.no_cache = 1 ist böse!</title>
		<link>http://typo3blogger.de/config-no_cache-1-ist-bose/</link>
		<comments>http://typo3blogger.de/config-no_cache-1-ist-bose/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 19:40:01 +0000</pubDate>
		<dc:creator>Georg Ringer</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=2437</guid>
		<description><![CDATA[Aus gegebenem Anlass folgt hier ein wichtiger Aufruf, den sich alle zu Herzen nehmen sollten! Egal wie klein oder groß die Seite, egal was für Hardware hinter der Website steckt, bitte kein config.no_cache = 1 verwenden!Ich hab gerade bei einer Seite aushelfen dürfen,  die unter massiver Last gelitten hat (mehre GBs pro Stunde Traffic) und [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Aus gegebenem Anlass folgt hier ein wichtiger Aufruf, den sich alle zu Herzen nehmen sollten! Egal wie klein oder groß die Seite, egal was für Hardware hinter der Website steckt, bitte kein config.no_cache = 1 verwenden!<span id="more-2437"></span>Ich hab gerade bei einer Seite aushelfen dürfen,  die unter massiver Last gelitten hat (mehre GBs pro Stunde Traffic) und wo die Verbindung zur Datenbank fast nicht mehr zustande kam. Das Problem lies sich gar nicht so einfach finden weil man kaum ins Backend konnte, aber der TS Object Browser hats dann doch gefunden. Es gab noch ein TS-Template mit dem tollen Namen &#8220;Developent&#8221;, in dem noch config.no_cache = 1 gesetzt war.</p>
<p>Also bitte verwendet diese Einstellung <strong>nie</strong>, auch nie zur Entwicklung! Gerade hier sollte man so real wie möglich testen und dann fallen diverse Probleme sofort auf!</p>
<p><strong>Alternativen</strong>:</p>
<ul>
<li>Cache der Seite auf ein paar Minuten stellen, das bringt schon sehr viel</li>
<li>USER_INT / COA_INT wenns wirklich nicht gecached werden darf</li>
<li>generell vorher überlegen wie gewisse Logiken implementiert werden können</li>
<li>Extension coago</li>
</ul>
<p>Wie bereits in <a href="http://typo3blogger.de/cache-probleme-mit-typo3/" target="_blank">http://typo3blogger.de/cache-probleme-mit-typo3/</a> beschrieben, kann im Install-Tool mit <span><em>[FE][disableNoCacheParameter] = 1 </em></span>verhindert werden, dass das no_cache greift!</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/config-no_cache-1-ist-bose/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>TYPO3 Performance &#8211; Grundlage</title>
		<link>http://typo3blogger.de/typo3-performance-grundlage/</link>
		<comments>http://typo3blogger.de/typo3-performance-grundlage/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 14:58:03 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=1075</guid>
		<description><![CDATA[Im Rahmen einer Studienausarbeitung habe ich Testfälle analysiert um die TYPO3 Performance zu messen und zu definieren. Ich werden in den nächsten Tagen/Wochen einige Texte aus dieser Arbeit veröffentlichen. Um den Grundstoff für weitere Testfälle und Diskussionen zu liefern, veröffentliche ich nun das &#8220;Grundlage&#8221; Kapitel! PS: Die Texte wurde leicht an den Blog-Slang (gibt es [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Im Rahmen einer Studienausarbeitung habe ich Testfälle analysiert um die TYPO3 Performance zu messen und zu definieren. Ich werden in den nächsten Tagen/Wochen einige Texte aus dieser Arbeit veröffentlichen. Um den Grundstoff für weitere Testfälle und Diskussionen zu liefern, veröffentliche ich nun das &#8220;Grundlage&#8221; Kapitel!</p>
<p>PS: Die Texte wurde leicht an den Blog-Slang (gibt es das) angepasst.</p>
<p>Bevor die exakten Testfälle analysiert und ausgewertet werden, wird der Ablauf einer Client-Anfrage an eine TYPO3 Webseite erläutert. Für jeden Prozessschritt werden Optimierungspotentiale definiert, anhand denen man die Performance Tests ansetzen kann, um die Geschwindigkeit der Webseite zu steigern. Diese Übersicht dient den nachfolgenden Analysen, um aufzuzeigen welche Möglichkeiten zur Optimierung gegeben sind.<span id="more-1075"></span></p>
<p>Hinweis: Das Optimierungspotential ist stichpunktartig formuliert und kann weiter definiert werden.</p>
<p><img class="alignnone size-medium wp-image-1077" title="Request Prozesse" src="http://typo3blogger.de/wp-content/uploads/2008/12/request_prozesse-238x300.jpg" alt="Request Prozesse" width="238" height="300" /></p>
<p>Die Performance einer Webseite baut auf viele verschiedene Prozesse auf. Bei einem Request an einen Webserver müssen nicht zwingend alle Prozesse abgearbeitet werden. Durch das Cachen von Daten auf den verschiedenen Ebenen der Anfrage, kann man die Reaktionszeit der Webseite verkürzen. Die Abbildung (s.o.) verdeutlicht den Weg der zurück gelegt werden muss, wenn eine Webseite geladen wird. Das Schaubild ist dabei ausschließlich auf TYPO3 bezogen, ähnelt aber einer normalen Webseiten-Anfrage sehr stark.</p>
<h3>DNS</h3>
<p>Das &#8220;Domain Name System&#8221; ist ein zentrales Element des heutigen Internet. Die DNS-Server kümmern sich um die Zuweisung von Hostnamen (z.B. www.google.de) auf IP Adressen. Dieser Schritt ist somit der erste Schritt der bei einer Anfrage gemacht wird. Bei einem ersten Zugriff auf eine Webseite ist die Auflösung des Hostnames ein unvermeidbarer Vorgang. Die dazugehörige IP Adresse wird im Anschluss lokal und auch beim Provider gespeichert und nur im Fehlerfall erneut mit einem DNS-Server verifiziert.</p>
<p>Optimierungspotential:</p>
<ul>
<li>Die TTL (&#8220;Time to Live&#8221;) Zeit der Domain herauf setzen. Die TTL wird vom Master Nameserver definiert und legt fest, wie lange andere Namensserver die IP mit der dazugehörigen Domain speichern dürfen. (DNS Cache)</li>
</ul>
<h3>Apache (Webserver)</h3>
<p>Nachdem der Client die IP Adresse erhalten hat, beginnt die eigentliche Anfrage an den Webserver. Der Apache(<a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a>) ist das Webserver System, welches weltweit am meisten verbreitet ist. Der Apache wird vorzugsweise auf UNIX Plattformen betrieben. Durch zahlreiche Module lässt sich der Funktionsumfang des Apaches ausbauen, um z.B. Daten zu komprimieren oder Weiterleitungen durchzuführen. Die Aufgabe des Apache ist es, die Anfragen des Benutzers (Clients) entgegen zu nehmen und den passenden internen Prozess anzustoßen. Dabei geht es nicht ausschließlich um TYPO3 Anfragen, sondern auch um alle anderen Arten von Anfragen, die der Apache verwaltet (Bilder, Cascading Style Sheets, Javascript, Flash etc.).</p>
<p>Optimierungspotential:</p>
<ul>
<li>Den Request-Overhead reduzieren, indem man nicht benutze Apache-Module deaktiviert.</li>
<li> PHP mit einem anderen Mechanismus laden. Es gibt mehrere Wege PHP in den Apache zu integrieren. Als Modul, FastCGI oder CGI. FastCGI stellt die modernste Methode dar.</li>
<li> HTTP Cache Headers bzw. Expires Header um gesendete Dateien dauerhaft beim Client zu Cachen.</li>
<li> TYPO3 nicht laden, indem man TYPO3-Seiten in statische Dateien ablegt und diese direkt vom Apache ausliefern lässt.</li>
</ul>
<h3>PHP (Skriptsprache)</h3>
<p>Die interpretierte Skriptsprache PHP (Rekursives Akronym für &#8216;PHP: Hypertext Preprocessor&#8217;) ist das Modul, welches der Apache direkt nach dem Request lädt, wenn es zu einem normalen TYPO3 Request kommt. TYPO3 ist komplett in PHP programmiert worden und ist somit erforderlich für den Betrieb des Content Management Systems.</p>
<p>Optimierungspotential:</p>
<ul>
<li>PHP Beschleuniger interpretieren PHP einmalig und cachen PHP in einer Art Byte-Code, der deutlich schneller in der Ausführungszeit ist, weil ein erneutes interpretieren nicht notwendig ist.</li>
<li> PHP interne Optimierung in Schleifen, Strings und Funktionen. Bestimmte Schleifenkonstrukte und Funktionen laufen schneller als andere, trotz des gleichen Ergebnisses.</li>
<li> Programmstrukturen oder Design Patterns benutzen die Arbeitsspeicher beim durchlaufen einsparen. So kann man z.B. mittels des Singleton Patterns Objekte einmalig machen, anstatt bei jedem gebrauch des Objektes eine neue Instanz zu erstellen.</li>
<li> Cachen von Ausgaben, um unnötiges Durchlaufen von Funktionen zu verhindern.</li>
</ul>
<h3>TYPO3</h3>
<p>TYPO3 ist der Flaschenhals der serverseitigen Performance. Es ist in PHP entwickelt und interagiert mit der MySQL Datenbank. TYPO3 wird dabei in das Frontend (FE) und in das Backend (BE) unterteilt, die bei der Optimierung separat betrachtet werden.</p>
<h3>TYPO3 &#8211; Frontend</h3>
<p>Das Frontend von TYPO3 stellt die eigentliche Ausgabe zum Browser dar. Die Ausgabe ist Format unabhängig, erfolgt aber in 99% der Fälle in einem von Webbrowsern lesbaren Format (XML oder XHML). Bilder und andere Elemente wie Javascript und CSS, werden vom TYPO3 Frontend generiert und statisch im Dateisystem abgelegt.</p>
<p>Optimierungspotential:</p>
<ul>
<li> PHP Optimierung (siehe PHP Optimierungspotential).</li>
<li> TYPO3 Caches spielen eine Größe Rolle, um die Performance zu steigern. TYPO3 Caches gibt es sowohl für die TYPO3 interne Konfigurationssprache TypoScript als auch auf Seitenebene für Contentelemente.</li>
<li> Der TYPO3 Static File Cache legt die komplette Ausgabe von TYPO3 im Dateisystem ab, damit der Apache TYPO3 bei einer Anfrage nicht mehr laden muss.</li>
</ul>
<h3>TYPO3 &#8211; Backend</h3>
<p>Das Backend dient der Verwaltung der TYPO3-Webseite. Das Cachen von Inhalten ist hier nur sehr schwer möglich, weil die Ansicht eines Redakteurs immer aktuell sein muss.</p>
<p>Optimierungspotential:</p>
<ul>
<li> Cachen von Icon&#8217;s (Grafiken), Javascript und CSS für das TYPO3 Backend.</li>
<li> Technologien wie Google Gears implementieren, um eventuell sogar Datenbanken beim Client zu speichern.</li>
</ul>
<h3>MySQL (Datenbank)</h3>
<p>MySQL ist das primäre Datenbank-System hinter TYPO3. Durch die TYPO3 Datenbankabstraktion ist es möglich andere Datenbanken an das Content Management System anzubinden. Von diesem Schritt wird aber abgeraten, weil es zu Komplikationen kommen kann, wenn Extensions benutzt werden, die nicht die TYPO3 API (Application Programming Interface, de. &#8220;Programmierschnittstelle&#8221;) benutzen. Damit der Abstraktionslayer die Datenbankabfragen für verschiedene Systeme zusammen bauen kann, ist man dazu gezwungen, Kompromisse in SQL einzugehen, weshalb man nicht alle Queries perfektionieren kann.</p>
<p>Optimierungspotential:</p>
<ul>
<li>Queries weitestgehend optimieren. Evtl. eine native angepasste Implementierung für MySQL als Hauptdatenbanksystem.</li>
<li> Query Cache aktivieren. Seit der MySQL Version 4.x ist der Query Cache standardmäßig eingeschaltet. Durch TYPO3 wird aber die Funktionsweise zur Nichte gemacht, weil nahezu jede Query mit einem aktuellen Timestamp abgefragt wird.</li>
<li> Redundante Query eliminieren, die im Rendering Prozess auftreten können.</li>
<li> Query Resultsets cachen, um das Abfragen der Datenbank teilweise zu reduzieren.</li>
</ul>
<h3>Verbindung</h3>
<p>Die Verbindung stellt ein großes Problem bei Webseiten dar, weil HTTP ein zustandsloses Protokoll ist. Das bedeutet, dass wenn eine Webseite viele Dateien enthält, der Aufbau der Webseite deutlich länger dauert, unabhängig davon wie groß diese Dateien sind. Das liegt dadran, dass ein HTTP Request einen sehr großen Overhead erzeugt und gegebenenfalls sogar das synchrone Laden der Webseite unterbinden kann. Man bedenke das eine Webseite die z.B. ein grafisches Menü besitzt, schnell an die 100 Anfragen generieren kann.</p>
<p>Optimierungspotential:</p>
<ul>
<li> HTTP Cache Headers bzw. Expires Header (siehe Apache).</li>
<li> Javascript und CSS Dateien zusammenführen und komprimieren, um sowohl die HTTP Requests, als auch das Dateivolumen zu reduzieren.</li>
<li> Wenn der anfragende Client GZip unterstützt, sollte man dies unbedingt nutzen um Javascript, CSS und XHTML zu komprimieren.</li>
</ul>
<h3>Rendering</h3>
<p>Das Rendering im Browser des Clients stellt den letzten Schritt bei einer Anfrage an eine TYPO3 Seite (auch normalen Webseite <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) dar. Beim Rendering ist ausschließlich die Leitung des Clients entscheidend. Dennoch kann man helfen ein möglichst schnelles und fehlerfreies Rendering zu gewährleisten.</p>
<p>Browser Rendering Engines unterscheiden zwei verschiedene Modi. Den &#8220;Standard mode&#8221; und den &#8220;Quirks mode&#8221;. Der Standard Modus ist deutlich schneller und beschreibt das Rendern von XHTML Seiten. Alle anderen Doctype Definitionen (HTML) fallen in den Quirks Modus zurück, der langsamer ist, weil er weitestgehend abwärtskompatibel ist.</p>
<p>Optimierungspotential:</p>
<ul>
<li> Valides XHTML, um den Standard Modus zu benutzen, der ein schnelleres Rendern verspricht.</li>
<li> Valides CSS, um das Rendern der Webseite weiter zu beschleunigen.</li>
<li> Javascript sollte am Ende des XHTML Dokuments geladen werden. Während es geladen wird, lädt der Browser keine anderen Dateien mehr, weil Javascript evtl. das HTML Dokument manipulieren könnte.</li>
</ul>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/typo3-performance-grundlage/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Türchen 22: kommaseparierte Listen in Extensions abfragen</title>
		<link>http://typo3blogger.de/turchen-22-kommaseparierte-listen-in-extensions-abfragen/</link>
		<comments>http://typo3blogger.de/turchen-22-kommaseparierte-listen-in-extensions-abfragen/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 09:32:26 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=1066</guid>
		<description><![CDATA[Gestern hat euch der Frank den Unterschied von temp und lib Objekten beschrieben und ich muss mich dafür entschuldigen das Türchen 20 Ausgefallen ist. Liege im Moment halb krank im Bett. Dafür gibt es nächstes Jahr das Türchen doppelt. Nun zum eigentlichen Türchen&#8230; Ergänzend zu diesem Beitrag wollte ich euch einfach einmal zeigen wie dies [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Gestern hat euch der Frank den <a href="http://typo3weblog.de/2008/12/21/adventskalender-2008-turchen-21/">Unterschied von temp und lib Objekten</a> beschrieben und ich muss mich dafür entschuldigen das Türchen 20 Ausgefallen ist. Liege im Moment halb krank im Bett. Dafür gibt es nächstes Jahr das Türchen doppelt. Nun zum eigentlichen Türchen&#8230;</p>
<p>Ergänzend zu <a href="http://typo3blogger.de/kommaseparierte-liste-mit-typoscript-manipulieren/">diesem Beitrag</a> wollte ich euch einfach einmal zeigen wie dies in einer Extension aussehen kann. Oft werden Extension nachträglich manipuliert und aus einer 1:n Beziehung kann mal schnell eine m:n Beziehung werden (Kundenwunsch <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Dies in TYPO3 zu realisieren ist nicht sehr aufwendig, aber bei einer Umstellung kann gerne mal was schief gehen.<span id="more-1066"></span></p>
<p>Der einfachere Weg ist, den Datenbank Typ des betreffenden Feldes zu ändern (damit die kommaseparierte Liste aufgenommen werden kann) und im TCA das betreffende Feld nicht mehr begrenzen (zusätzlich vielleicht auch größer machen). In der Extension fragt man das betreffende Feld dann nur ein wenig anderes ab. Anstatt im WHERE String einen direkten vergleich zu machen&#8230;</p>
<pre> ... AND feldname=5 ...</pre>
<p>wird nun eine TYPO3 Methode zur Hilfe genommen.</p>
<pre> ... AND '.$GLOBALS['TYPO3_DB']-&gt;listQuery('feldname',5,'tabellenname').' ...</pre>
<p>Dadurch wird nun automatisch ein WHERE-Block generiert der die kommaseparierte Liste in den Datenbanken auflöst. Probiert es am besten selber mal aus.</p>
<p>PS: Performanter und schöner ist eine ordentliche Detail Tabelle!!</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/turchen-22-kommaseparierte-listen-in-extensions-abfragen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Türchen 2: Tutorial &#8211; TYPO3 entrümpeln</title>
		<link>http://typo3blogger.de/turchen-2-tutorial-typo3-entrumpeln/</link>
		<comments>http://typo3blogger.de/turchen-2-tutorial-typo3-entrumpeln/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 23:10:39 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/turchen-2-tutorial-typo3-entrumpeln/</guid>
		<description><![CDATA[Nachdem Frank den gemeinsamen Adventskalender angekündigt hat, hat er gestern mit dem ersten Türchen vorgelegt. Heute öffne ich das zweite Türchen für euch, indem wir ein &#8220;wenig&#8221; TYPO3 aufräumen werden. Fangen wir einfach direkt mit den Files an&#8230; TYPO3 bläht sich in Sachen Dateien schnell auf. Bei 99% der &#8220;Datei&#8221;-Felder im Backend wird eine Kopie [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Nachdem Frank den gemeinsamen Adventskalender <a href="http://typo3weblog.de/2008/11/28/adventskalender-2008-ab-montag-gehts-wieder-los/" target="_blank">angekündigt</a> hat, hat er gestern mit dem <a href="http://typo3weblog.de/2008/12/01/adventskalender-2008-turchen-1/" target="_blank">ersten Türchen</a> vorgelegt. Heute öffne ich das zweite Türchen für euch, indem wir ein &#8220;wenig&#8221; TYPO3 aufräumen werden.<span id="more-873"></span></p>
<p><strong>Fangen wir einfach direkt mit den Files an&#8230;</strong></p>
<p>TYPO3 bläht sich in Sachen Dateien schnell auf. Bei 99% der &#8220;Datei&#8221;-Felder im Backend wird eine Kopie der Datei im &#8220;uploads&#8221;-Verzeichnis hinterlegt, an welches normale Redakteure nicht heran kommen. Dies hat zum einen Vorteile zum anderen aber auch Nachteile. So ist die Seite z.B. dagegen geschützt das ein Redakteure ausversehen (Soll es ja geben <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) eine falsche Datei im fileadmin löscht. Der Nachteil dieser Kopie ist, das es keinen Mechanismus gibt der die Datei löscht, sobald auch der Datensatz gelöscht wurde. Somit läuft der uploads Folder langsam aber sicher mit nicht mehr gebrauchten Bildern voll&#8230;</p>
<p>Nun gibt es zwei einfache Vorgehensweisen. Die simpelste ist die Installation der Extension <a href="http://typo3.org/extensions/repository/view/kb_cleanfiles/current/" target="_blank">kb_cleanfiles</a>. Diese Extension vergleicht die Inhalte der Ordner mit den Referenzierungen in den dazugehörigen Datenbank Tabellen. Auf einen Blick sieht man Dateien die entfernt werden können. Durch einen weiteren Klick werden diese entfernt. Screenshot der Extension:</p>
<p><img src="http://typo3blogger.de/wp-content/uploads/2008/12/bild-1.png" alt="Bild 1.png" width="365" height="162" /></p>
<p>Eine Alternative zu der Extension ist das TYPO3 interne Modul. Zu finden ist das Modul unter &#8220;DB-Überprüfung&#8221; -&gt; &#8220;Database Relations&#8221;. Neben dem Listing &#8220;Dateien, die in keinem Eintrag verwendet werden (bitte löschen!):&#8221;, welches der inhaltlichen Ausgabe der Extension sehr ähnelt, wird hier auch angezeigt ob Dateien doppelt referenziert werden (Das ist in TYPO3 nicht üblich und geschieht evtl. durch schlecht durchdachte Extensions. TYPO3 selbst erstellt immer eine Kopie und Nummeriert diese ggf. durch.). Auch wenn ihr dem TYPO3 Module evtl. mehr vertraut, habt ihr hier keine direkte löschen Funktion. Dies muss dann von Hand vorgenommen werden.</p>
<p>Die oben beschriebenen Techniken befreit den uploads-Folder von Altlast. Aber auch der &#8220;typo3temp&#8221;-Ordner wird schnell zu gemüllt. Dieser wird NICHT, wie viele denken, bei einem &#8220;FE-Clear-Cache&#8221; geleert. Generierte Bilder für FE und BE sowie GifBuilder Grafiken bleiben weiterhin bestehen. Deshalb ist auch hier ein aufräumen nach einer gewissen Zeit empfehlenswert. Dies geschieht am besten über das Install Tool mit dem man die Ordner nach und nach leeren kann (Siehe Screenshot)</p>
<p><img src="http://typo3blogger.de/wp-content/uploads/2008/12/bild-3.png" alt="Bild 3.png" width="227" height="260" /></p>
<p><strong>Weiter geht es mit der Datenbank&#8230;</strong></p>
<p>Neben den Dateien gibt es auch die Datenbank die gerne schnell voll läuft. TYPO3 hat die &#8220;gute&#8221; Eigenschaft nichts zu löschen, sondern Datensätze zu &#8220;flaggen&#8221; damit man diese leicht rekonstruieren bzw. wiederherstellen kann. Nun gibt es aber viele, viele Datensätze die wirklich nicht mehr benötigt werden (z.B. Testdaten der Erstbefüllung). Diese zu finden und zu löschen ist die Aufgabe der <a href="http://typo3.org/extensions/repository/view/kj_recycler/current/" target="_blank">kj_recycler</a>-Extension. In einem übersichtlichen Backendmodul bekommt man alle gelöschten Datensätze angezeigt, welche man dann &#8220;richtig&#8221; löschen kann. Achtung: Es gibt kein zurück!! Mein Tipp: Die Extension updated nicht den Referenz Index. Dieser sollte im Anschluss des Löschens manuell geupdated werden, damit dieser wieder richtig ist.</p>
<p><img src="http://typo3blogger.de/wp-content/uploads/2008/12/bild-4.png" alt="Bild 4.png" width="334" height="157" /></p>
<p>Eine weitere Last in der Datenbank können die Cache Tabellen sein. Temporäre Tabelle beginnen laut TYPO3 Namenkonvention mit dem Präfix &#8220;cache_&#8221;. Diese Tabellen können &#8220;im Normalfall&#8221; ohne weiteres geleert werden (nicht droppen). In die Liste würde ich gerne noch die &#8220;sys_histroy&#8221; aufnehmen. Diese Tabelle wird auch sehr schnell voll. Wichtig ist dabei aber, dass man wissen sollte das die Tabelle Aktionen der Backendaktivität enthält, die dadurch verloren gehen (Loginzeiten, Änderungen, History halt <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p><img src="http://typo3blogger.de/wp-content/uploads/2008/12/bild-5.png" alt="Bild 5.png" width="221" height="135" /></p>
<p><strong>Fazit</strong></p>
<p>Durch die oben beschriebene Massnahmen könnt Ihr grade bei älteren TYPO3 Seiten ordentlich aufräumen und auch die Datenbank evtl. sogar beschleunigen (weniger ist manchmal mehr <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Ich empfehle jedoch vorher immer ein Backup zu machen.</p>
<p>Morgen wird das Türchen wieder im <a href="http://typo3weblog.de/" target="_blank">typo3weblog.de</a> geöffnet.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/turchen-2-tutorial-typo3-entrumpeln/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>MySQL Performance</title>
		<link>http://typo3blogger.de/mysql-performance/</link>
		<comments>http://typo3blogger.de/mysql-performance/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 14:39:31 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TYPO3blogger]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/mysql-performance/</guid>
		<description><![CDATA[So&#8230; noch 1-2 Wochen dann werde ich die Praxisarbeit über TYPO3 Performance anfangen. Um schon mal ein paar Dinge fest zu halten, wollte ich euch erst einmal die Seite phpperformance.de empfehlen, hier werden gelegentlich sehr interessante Beiträge zu MySQL und PHP Performance geblogt. Kürzlich wurde dann dieser Beitrag veröffentlicht, der zahlreiche Präsentationen über MySQL Performance [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>So&#8230; noch 1-2 Wochen dann werde ich die Praxisarbeit über <strong>TYPO3 Performance</strong> anfangen. Um schon mal ein paar Dinge fest zu halten, wollte ich euch erst einmal die Seite <a href="http://phpperformance.de/" target="_blank">phpperformance.de</a> empfehlen, hier werden gelegentlich sehr interessante Beiträge zu MySQL und PHP Performance geblogt.</p>
<p>Kürzlich wurde dann <a href="http://phpperformance.de/mysql-praesentationen/" target="_blank">dieser Beitrag</a> veröffentlicht, der zahlreiche Präsentationen über MySQL Performance listet die sehr lesenswert sind. Alle Präsentationen werden von <a href="http://www.percona.com/presentations.html" target="_blank">percona.com</a> zum Download angeboten, wo es auch noch weitere gibt.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/mysql-performance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Performance Mailingliste &#8211; tslib_cObj</title>
		<link>http://typo3blogger.de/performance-mailingliste-tslib_cobj/</link>
		<comments>http://typo3blogger.de/performance-mailingliste-tslib_cobj/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 20:03:53 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/performance-mailingliste-tslib_cobj/</guid>
		<description><![CDATA[Im Moment ist leider noch nicht so viel los auf der Performance Mailinglist, über die ich auch letzten Monat berichtet habe. Interessante Ansätze gibt es dennoch. z.B. hat Ingo Renner einen Cache für die getTreeList Funktion geschrieben die durch cachen die Performance steigern sollen. Ich werde das mal am WE integrieren und testen. Vielleicht haben [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Im Moment ist leider noch nicht so viel los auf der Performance Mailinglist, über die ich auch <a href="http://typo3blogger.de/typo3-performance-mailingliste/" target="_blank">letzten Monat</a> berichtet habe. Interessante Ansätze gibt es dennoch. z.B. hat Ingo Renner einen <a href="http://bugs.typo3.org/view.php?id=8515" target="_blank">Cache für die getTreeList Funktion</a> geschrieben die durch cachen die Performance steigern sollen. Ich werde das mal am WE integrieren und testen. Vielleicht haben ja auch noch andere Lust den neuen <a href="http://bugs.typo3.org/view.php?id=8515" target="_blank">Cache zu testen</a> oder in der Mailingliste mit zu diskutieren.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/performance-mailingliste-tslib_cobj/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TYPO3 Frühjahrsputz</title>
		<link>http://typo3blogger.de/typo3-fruhjahrsputz/</link>
		<comments>http://typo3blogger.de/typo3-fruhjahrsputz/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 11:57:25 +0000</pubDate>
		<dc:creator>Tim Lochmüller</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/typo3-fruhjahrsputz/</guid>
		<description><![CDATA[Für die Frühjarhsputz fast zu spät, aber man kann ja auch im Sommer mal sauber machen Michiel Roos hat auf typofree.org beschrieben, wie man TYPO3 am besten wieder auf Vordermann bringt. Nach längerem benutzen werden die Projekte gerne &#8220;zugemüllt&#8221; und TYPO3 versucht leider nicht direkt das zu verhindern In den Beiträgen TYPO3 Housekeeping und TYPO3 [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Für die Frühjarhsputz fast zu spät, aber man kann ja auch im Sommer mal sauber machen <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Michiel Roos hat auf typofree.org beschrieben, wie man TYPO3 am besten wieder auf Vordermann bringt. Nach längerem benutzen werden die Projekte gerne &#8220;zugemüllt&#8221; und TYPO3 versucht leider nicht direkt das zu verhindern <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  In den Beiträgen</p>
<p><a href="http://typofree.org/home/title/typo3-housekeeping/" target="_blank">TYPO3 Housekeeping</a> und <a href="http://typofree.org/home/title/typo3-housekeeping-part-2/" target="_blank">TYPO3 Housekeeping 2</a></p>
<p>bekommt man die Infos, mal wieder &#8220;klar Schiff&#8221; zu machen.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/typo3-fruhjahrsputz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

