<?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>Code42 &#187; optymalizacja</title>
	<atom:link href="http://code42.pl/tag/optymalizacja/feed/" rel="self" type="application/rss+xml" />
	<link>http://code42.pl</link>
	<description>Wielkie Pytanie o Życie, Kod i całą resztę</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Profilowanie aplikacji w PHP z wykorzystaniem Xdebug</title>
		<link>http://code42.pl/2009/06/02/profilowanie-aplikacji-w%c2%a0symfony-z%c2%a0wykorzystaniem-xdebug/</link>
		<comments>http://code42.pl/2009/06/02/profilowanie-aplikacji-w%c2%a0symfony-z%c2%a0wykorzystaniem-xdebug/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 13:36:03 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[optymalizacja]]></category>
		<category><![CDATA[profilowanie]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=388</guid>
		<description><![CDATA[Xdebug to rozszerzenie do PHP umożliwiające m.in debugowanie i profilowanie aplikacji napisanych właśnie w tym języku. O samej jego instalacji nie ma się co rozpisywać (użytkownikom Arch Linuksa tylko podpowiem, że znajduje się on w AUR), gdyż każda większa dystrybucja powinna mieć Xdebuga wśród swoich pakietów. Po zainstalowaniu, jeśli nasz system tego nie zrobi za nas, trzeba [...]


Brak podobnych wposów.]]></description>
			<content:encoded><![CDATA[<p><img src="http://code42.pl/wp-content/uploads/bootstrap-chart-536x80.jpg" alt="" title="bootstrap-chart" width="536" height="80" class="aligncenter size-medium wp-image-712" /></p>
<p>Xdebug to rozszerzenie do PHP umożliwiające m.in debugowanie i profilowanie aplikacji napisanych właśnie w tym języku. O samej jego instalacji nie ma się co rozpisywać (użytkownikom Arch Linuksa tylko podpowiem, że znajduje się on w <a href='http://aur.archlinux.org/packages.php?ID=26301'>AUR</a>), gdyż każda większa dystrybucja powinna mieć Xdebuga wśród swoich pakietów.</p>
<p>Po zainstalowaniu, jeśli nasz system tego nie zrobi za nas, trzeba rozszerzenie wstępnie skonfigurować. Na przykładzie wspomnianego Archa zostaniemy dokładnie poinstruowani co trzeba zrobić:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"> <span style="color: #000066; font-weight:bold;">==</span>&gt; Please add the following lines to your /etc/php/conf.d/xdebug.ini
&nbsp;
 <span style="color: #000099;">zend_extension</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/usr/lib/php/xdebug.so</span>
 xdebug.remote_enable<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">on</span>
 xdebug.remote_host<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">&lt;ip address&gt;</span>
 xdebug.remote_port<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">&lt;port&gt;</span>
 xdebug.remote_handler<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">dbgp</span></pre></div></div>

<p>Jednakże dla nas ważna jest tylko pierwsza linia tych ustawień, ponieważ pozostałe służą do komunikacji z osobnym klientem. Dlatego też można te linie zakomentować, bądź usunąć. Interesuje nas natomiast włączenie profilowania, co można uskutecznić poprzez dopisanie następujących linii do pliku konfiguracyjnego:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">xdebug.profiler_enable<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">1</span>
xdebug.profiler_output_dir<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/tmp</span></pre></div></div>

<p>Katalog docelowy jest domyślnie ustawiony na <code>/tmp</code>, więc ta linia tak naprawdę nic nie wnosi, poza tym, żeby było jasno widać jak można ten katalog zmienić.</p>
<p>Następnie restartujemy lokalny serwer http i odpalamy stronę www, której działanie chcemy przeanalizować. W katalogu docelowym (<code>/tmp</code>) powinny znajdować się już raporty o nazwach w rodzaju: cachegrind.out.<PID>.</p>
<p>Raporty takie można otworzyć za pomocą programów <a href="http://kcachegrind.sf.net">KCacheGrind</a>, <a href="http://sourceforge.net/projects/wincachegrind">WinCacheGrind</a> czy <a href="http://www.maccallgrind.com/">MacCallGrind</a> i wyglądają mniej więcej tak:</p>
<p><a href="http://code42.pl/wp-content/uploads/2009/06/kcachegrind.png"><img src="http://code42.pl/wp-content/uploads/2009/06/kcachegrind-300x158.png" alt="kcachegrind" title="kcachegrind" width="300" height="158" class="aligncenter size-medium wp-image-396" /></a></p>
<p>Na koniec ostateczny wygląd <code>xdebug.ini</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000099;">zend_extension</span><span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/usr/lib/php/xdebug.so</span>
xdebug.profiler_enable<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">1</span>
xdebug.profiler_output_dir<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">/tmp</span></pre></div></div>



<p>Brak podobnych wposów.</p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/06/02/profilowanie-aplikacji-w%c2%a0symfony-z%c2%a0wykorzystaniem-xdebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Krótko: Vim i powolna edycja plików PHP</title>
		<link>http://code42.pl/2009/01/26/vim-edycja-plikow-php/</link>
		<comments>http://code42.pl/2009/01/26/vim-edycja-plikow-php/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 10:55:44 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[Vim]]></category>
		<category><![CDATA[optymalizacja]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=187</guid>
		<description><![CDATA[Vim potafi bardzo spowolnić (szczególnie poruszanie kursorem) podczas edycji plików PHP, co jest spowodowane najprawdopodobniej dopasowywaniem nawiasów (aby podświetlić parę). Jeśli ten ficzer nie jest dla krytyczny dla naszej pracy, warto go wyłączyć dodając w swoim .vimrc linię: let loaded_matchparen = 1 Oczywiście wciąż można używać kombinacji shift-5, aby „ręcznie” odnaleźć nawias z pary. Podobne wpisy:Krótko: uwaga na [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/01/09/optymalizacje-sfpropelpagergetresults/' rel='bookmark' title='Krótko: uwaga na sfPropelPager::getResults()'>Krótko: uwaga na sfPropelPager::getResults()</a></li>
<li><a href='http://code42.pl/2011/04/17/vim-latwe-zwiekszaniezmnieszanie-liczb-i-liter/' rel='bookmark' title='Vim: łatwe zwiększanie/zmnieszanie liczb i liter'>Vim: łatwe zwiększanie/zmnieszanie liczb i liter</a></li>
<li><a href='http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/' rel='bookmark' title='Vim: Znajdowanie plików w podkatalogach'>Vim: Znajdowanie plików w podkatalogach</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Vim potafi bardzo spowolnić (szczególnie poruszanie kursorem) podczas edycji plików PHP, co jest spowodowane najprawdopodobniej dopasowywaniem nawiasów (aby podświetlić parę). Jeśli ten ficzer nie jest dla krytyczny dla naszej pracy, warto go wyłączyć dodając w swoim <code>.vimrc</code> linię:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #804040;">let</span> loaded_matchparen = <span style="color: #000000; font-weight:bold;">1</span></pre></div></div>

<p>Oczywiście wciąż można używać kombinacji <kbd>shift-5</kbd>, aby „ręcznie” odnaleźć nawias z pary.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/01/09/optymalizacje-sfpropelpagergetresults/' rel='bookmark' title='Krótko: uwaga na sfPropelPager::getResults()'>Krótko: uwaga na sfPropelPager::getResults()</a></li>
<li><a href='http://code42.pl/2011/04/17/vim-latwe-zwiekszaniezmnieszanie-liczb-i-liter/' rel='bookmark' title='Vim: łatwe zwiększanie/zmnieszanie liczb i liter'>Vim: łatwe zwiększanie/zmnieszanie liczb i liter</a></li>
<li><a href='http://code42.pl/2009/03/26/vim-znajdowanie-plikow-w-podkatalogach/' rel='bookmark' title='Vim: Znajdowanie plików w podkatalogach'>Vim: Znajdowanie plików w podkatalogach</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/01/26/vim-edycja-plikow-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Krótko: uwaga na sfPropelPager::getResults()</title>
		<link>http://code42.pl/2009/01/09/optymalizacje-sfpropelpagergetresults/</link>
		<comments>http://code42.pl/2009/01/09/optymalizacje-sfpropelpagergetresults/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 13:18:54 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[optymalizacja]]></category>
		<category><![CDATA[propel]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=157</guid>
		<description><![CDATA[Obiekt sfPropelPager nie potrafi „keszować” w sobie wyników zapytania do bazy. Innymi słowy każde wywołanie metody getResults() odpytuje bazę danych. Nieświadomość tego faktu możne doprowadzić naszą aplikację do generowania dużych i bezsensownych obciążeń serwera. Dlatego też, trzeba uważać czy nie wywołuje się tej metody więcej niż jeden raz podczas jednego żądania (np. przy kilkukrotnym iterowaniu [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2009/01/26/vim-edycja-plikow-php/' rel='bookmark' title='Krótko: Vim i powolna edycja plików PHP'>Krótko: Vim i powolna edycja plików PHP</a></li>
<li><a href='http://code42.pl/2011/03/28/symfony-domyslny-wyglad-modulu/' rel='bookmark' title='Symfony: domyślny wygląd modułu'>Symfony: domyślny wygląd modułu</a></li>
<li><a href='http://code42.pl/2008/12/15/migracja-mysql%c2%a0%e2%86%92-postgresql-aplikacji-w-symfony-11/' rel='bookmark' title='Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1'>Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Obiekt <code>sfPropelPager</code> nie potrafi „keszować” w sobie wyników zapytania do bazy. Innymi słowy każde wywołanie metody <code>getResults()</code> odpytuje bazę danych. Nieświadomość tego faktu możne doprowadzić naszą aplikację do generowania dużych i bezsensownych obciążeń serwera.</p>
<p>Dlatego też, trzeba uważać czy nie wywołuje się tej metody więcej niż jeden raz podczas jednego żądania (np. przy kilkukrotnym iterowaniu po wynikach).</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2009/01/26/vim-edycja-plikow-php/' rel='bookmark' title='Krótko: Vim i powolna edycja plików PHP'>Krótko: Vim i powolna edycja plików PHP</a></li>
<li><a href='http://code42.pl/2011/03/28/symfony-domyslny-wyglad-modulu/' rel='bookmark' title='Symfony: domyślny wygląd modułu'>Symfony: domyślny wygląd modułu</a></li>
<li><a href='http://code42.pl/2008/12/15/migracja-mysql%c2%a0%e2%86%92-postgresql-aplikacji-w-symfony-11/' rel='bookmark' title='Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1'>Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/01/09/optymalizacje-sfpropelpagergetresults/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aktualizacja oprogramowania a wydajność</title>
		<link>http://code42.pl/2008/12/19/aktualizacja-oprogramowania-a-wydajnosc/</link>
		<comments>http://code42.pl/2008/12/19/aktualizacja-oprogramowania-a-wydajnosc/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 11:54:35 +0000</pubDate>
		<dc:creator>zergu</dc:creator>
				<category><![CDATA[Bazy danych]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[apache benchmark]]></category>
		<category><![CDATA[optymalizacja]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=79</guid>
		<description><![CDATA[Krótkie spostrzeżenie na temat wydajności aplikacji (praktycznie nie wypełnionej danymi) po następujących aktualizacjach: Symfony 1.1 → Symfony 1.2 Propel 1.2 → Propel 1.3 PHP 5.2.0 → PHP 5.2.6 PostgreSQL 8.1 → PostgreSQL 8.3 Prosty test został wykonany za pomocą ApacheBenchmarka: ab -c 5 -n 300 -H 'Connection: close'. Jak widać symulacja bazowała na 300 użytkownikach, przy czym [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2008/12/15/migracja-mysql%c2%a0%e2%86%92-postgresql-aplikacji-w-symfony-11/' rel='bookmark' title='Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1'>Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1</a></li>
<li><a href='http://code42.pl/2009/01/14/czas-zycia-krotki-w-postgresie/' rel='bookmark' title='PostgreSQL: obliczanie odstępów czasu'>PostgreSQL: obliczanie odstępów czasu</a></li>
<li><a href='http://code42.pl/2009/03/31/walidacja-jednego-pola-formularza-w-symfony/' rel='bookmark' title='Walidacja jednego pola formularza w symfony'>Walidacja jednego pola formularza w symfony</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://code42.pl/wp-content/uploads/speedometer-536x282.jpg" alt="" title="speedometer" width="536" height="282" class="aligncenter size-medium wp-image-676" /></p>
<p>Krótkie spostrzeżenie na temat wydajności aplikacji (praktycznie nie wypełnionej danymi) po następujących aktualizacjach:</p>
<ul>
<li>Symfony 1.1 → Symfony 1.2</li>
<li>Propel 1.2 → Propel 1.3</li>
<li>PHP 5.2.0 → PHP 5.2.6</li>
<li>PostgreSQL 8.1 → PostgreSQL 8.3</li>
</ul>
<p>Prosty test został wykonany za pomocą <a href='http://code42.pl/?p=93' title='Connection: close + Apache Benchmark'>ApacheBenchmarka</a>:<br />
<code>ab -c 5 -n 300 -H 'Connection: close'</code>. Jak widać symulacja bazowała na 300 użytkownikach, przy czym do 5 na raz wchodziło na stronę.</p>
<h2>Przed aktualizacją</h2>
<p>Próba 1:</p>
<pre>
Requests per second:    4.34 [#/sec] (mean)
Time per request:       1152.770 [ms] (mean)
Time per request:       230.554 [ms] (mean, across all concurrent requests)
</pre>
<p>Próba 2:</p>
<pre>
Requests per second:    4.79 [#/sec] (mean)
Time per request:       1043.581 [ms] (mean)
Time per request:       208.716 [ms] (mean, across all concurrent requests)
</pre>
<h2>Po aktualizacji</h2>
<p>Próba 1:</p>
<pre>
Requests per second:    5.33 [#/sec] (mean)
Time per request:       937.318 [ms] (mean)
Time per request:       187.464 [ms] (mean, across all concurrent requests)
</pre>
<p>Próba 2:</p>
<pre>
Requests per second:    5.39 [#/sec] (mean)
Time per request:       927.979 [ms] (mean)
Time per request:       185.596 [ms] (mean, across all concurrent requests)
</pre>
<p>Oczywiście z uwagi na brak testów pomiędzy poszczególnymi zmianami ciężko jest powiedzieć coś więcej, niż tyle że warto aktualizować, choćby o tego jednego requesta na sekundę ;). Ot, taka ciekawostka.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2008/12/15/migracja-mysql%c2%a0%e2%86%92-postgresql-aplikacji-w-symfony-11/' rel='bookmark' title='Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1'>Migracja MySQL → PostgreSQL aplikacji w Symfony 1.1</a></li>
<li><a href='http://code42.pl/2009/01/14/czas-zycia-krotki-w-postgresie/' rel='bookmark' title='PostgreSQL: obliczanie odstępów czasu'>PostgreSQL: obliczanie odstępów czasu</a></li>
<li><a href='http://code42.pl/2009/03/31/walidacja-jednego-pola-formularza-w-symfony/' rel='bookmark' title='Walidacja jednego pola formularza w symfony'>Walidacja jednego pola formularza w symfony</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2008/12/19/aktualizacja-oprogramowania-a-wydajnosc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

