<?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>Корчагин Станислав &#187; кэширование</title>
	<atom:link href="http://korchasa.ru/index.php/tag/%d0%ba%d1%8d%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed/" rel="self" type="application/rss+xml" />
	<link>http://korchasa.ru</link>
	<description>Разработка, тестирование, запуск</description>
	<lastBuildDate>Mon, 24 May 2010 23:28:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Презентация от старого доклада о кэшировании</title>
		<link>http://korchasa.ru/index.php/2009/05/%d0%bf%d1%80%d0%b5%d0%b7%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d1%82-%d1%81%d1%82%d0%b0%d1%80%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d0%ba%d0%bb%d0%b0%d0%b4%d0%b0-%d0%be-%d0%ba%d1%8d%d1%88%d0%b8/</link>
		<comments>http://korchasa.ru/index.php/2009/05/%d0%bf%d1%80%d0%b5%d0%b7%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d1%82-%d1%81%d1%82%d0%b0%d1%80%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d0%ba%d0%bb%d0%b0%d0%b4%d0%b0-%d0%be-%d0%ba%d1%8d%d1%88%d0%b8/#comments</comments>
		<pubDate>Sat, 16 May 2009 22:09:35 +0000</pubDate>
		<dc:creator>korchasa</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://korchasa.ru/?p=249</guid>
		<description><![CDATA[Видео со скончавшегося secon&#8217;а видимо не будет никогда, поэтому выкладываю только презентацию.
Cache in web (Secon 2008)

]]></description>
			<content:encoded><![CDATA[<p>Видео со скончавшегося <a href="http://www.secon.ru/">secon&#8217;а</a> видимо не будет никогда, поэтому выкладываю только презентацию.</p>
<div id="__ss_988908" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Cache in web (Secon 2008)" href="http://www.slideshare.net/korchasa/cache-in-web-secon-2008?type=presentation">Cache in web (Secon 2008)</a><object width="425" height="355" data="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=my-1233767974539817-1&amp;stripped_title=cache-in-web-secon-2008" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=my-1233767974539817-1&amp;stripped_title=cache-in-web-secon-2008" /><param name="allowfullscreen" value="true" /></object></div>
<p><img src="http://bs.yandex.ru/resource/spacer.gif?sign=25368431.4908262.1244038590.04e67eb813a8ee36e21abadd633caff9" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://korchasa.ru/index.php/2009/05/%d0%bf%d1%80%d0%b5%d0%b7%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d1%82-%d1%81%d1%82%d0%b0%d1%80%d0%be%d0%b3%d0%be-%d0%b4%d0%be%d0%ba%d0%bb%d0%b0%d0%b4%d0%b0-%d0%be-%d0%ba%d1%8d%d1%88%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dog-pile эффект. Как отгонять стаи собак.</title>
		<link>http://korchasa.ru/index.php/2008/04/dog-pile-%d1%8d%d1%84%d1%84%d0%b5%d0%ba%d1%82-%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%b3%d0%be%d0%bd%d1%8f%d1%82%d1%8c-%d1%81%d1%82%d0%b0%d0%b8-%d1%81%d0%be%d0%b1%d0%b0%d0%ba/</link>
		<comments>http://korchasa.ru/index.php/2008/04/dog-pile-%d1%8d%d1%84%d1%84%d0%b5%d0%ba%d1%82-%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%b3%d0%be%d0%bd%d1%8f%d1%82%d1%8c-%d1%81%d1%82%d0%b0%d0%b8-%d1%81%d0%be%d0%b1%d0%b0%d0%ba/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 02:16:00 +0000</pubDate>
		<dc:creator>korchasa</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://korchasa.ru/?p=32</guid>
		<description><![CDATA[Dog-pile эффект — ситуация когда кэш протухает, а большое количество запросов генерирует высокую нагрузку на источник данных, из которых строиться кэш.  Представьте, что вы кэшируете результат какого то тяжёлого запроса, например, список популярных статей. В какой-то момент времени кэш протухает, и его кто-то должен построить заново. В общем то пока все хорошо. Кроме случаев [...]]]></description>
			<content:encoded><![CDATA[<p><dfn>Dog-pile эффект</dfn> — ситуация когда кэш протухает, а большое количество запросов генерирует высокую нагрузку на источник данных, из которых строиться кэш.  <span id="more-32"></span>Представьте, что вы кэшируете результат какого то тяжёлого запроса, например, список популярных статей. В какой-то момент времени кэш протухает, и его кто-то должен построить заново. В общем то пока все хорошо. Кроме случаев когда построение кэша тяжёлая операция, а запросов на него много. Например, запрос для генерации кэша занимает 1 секунду, а пользователи ломятся по 10 штуков в секунду. Соответственно, 9 пользователей (кроме первого) будут только зря нагружать базу. А при большом количестве запросов могут и полностью ее положить.</p>
<h3>И пусть весь мир подождёт</h3>
<p>Первое, что нужно решить — может ли пользователь ждать генерации кэша. Пример с популярными статьями это цветочки, ибо есть еще сложно рассчитываемые рейтинги, которые могут считаться оооочень долго.  Предположим, что у нас простой случай и пользователь не сломается, если подождёт секунду-другую.</p>
<h4>Честные блокировки на генерацию</h4>
<p>Решение в лоб. Первый пришедший лочит кэш на генерацию, и отправляется генерировать кэш. Остальные, увидев лок, понимают, что не успели, чешут репы и думают, что делать.  Как именно делать лок зависит только от вашей фантазии и имеющихся средств. Это может быть, что угодно:</p>
<dl>
<dt>Лок файловой системы</dt>
<dd>есть косяки, но иногда работает <img src='http://korchasa.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Подробности в описании функции <a href="http://ru2.php.net/manual/en/function.flock.php">flock()</a>.</dd>
<dt>Мьютекс в хранилище</dt>
<dd>Если мы используем memcache и генерируемый кэш имеет ключ «popular_articles», тогда наличие данных с ключем «popular_articles_lock», говорит о том, что наш кэш уже кто-то генерирует. Тоже самое справедливо и для других хранилищ.</dd>
<dt>IPC семафоры</dt>
<dd>Настоящие пацанские <a href="http://ru2.php.net/manual/en/ref.sem.php">семафоры</a> <img src='http://korchasa.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Ни разу не использовал — руки не доходят.</dd>
</dl>
<p>Плюсы локов в том, что клиент сам решает, что делать в ситуации, когда ему нужны данные, а их кто-то генерирует. Например, если есть старые данные, то мы можем их отдать, а если данных нет, то либо подождать, либо честно вывести пользователю, что данных нет. На самом деле висящие в течении секунды пользователи совсем не есть гуд, но иногда можно допустить и такое.  Так же не стоит забывать, что при генерации может возникнуть ошибка, и в этом случае лок может остаться висеть(в случае memcache можно ставить ttl на лок).</p>
<h4>Организация «окна» для генерации</h4>
<p>Способ был подсмотрен в исходниках какого-то фреймворка <img src='http://korchasa.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Суть его в том, что ttl поддерживается не самим хранилищем, а клиентом, в виде отдельного ключа, и при истечение данные не удаляются. Т.е. приходит первый запрос,   видит что ttl истек, и начинает генерировать новое значение. Чтобы остальные запросы подумали, что все нормально, он продлевает ttl существующего кэша на какую-то заранее определённую величину. Если писатель умирает, то кэш быстро снова протухнет и кто-нибудь подхватит знамя генерации с трупа павшего товарища. Если же все нормально, то будет записан новое значение кэша и установлен новый ttl.  Основным минусом такого подхода является то, что ttl нельзя хранить средствами самого кэш-storage, т.к. во всех самых известных хранилищах невозможно получить значение ttl и сами данные с истекшим ttl.</p>
<h3>Я хочу вас всех, я хочу вас сразу!</h3>
<p>Случай у нас тяжёлый, и пользователю будет скучно коротать 20 секунд рисуя матом надписи на пыльном столе. Я знаю про кого будут эти надписи.  Главное откровение: чтобы избавиться от последствий многопоточности надо свести ее к одному потоку. Просто и со вкусом. Убираем всю генерацию кэша в оффлайн. ttl-ем в данном случае будет время перезапуска генерирующих кэш скриптов. Помимо быстрого ответа пользователю тут есть еще один плюс — наборы кэшей часто генерировать быстрее, чем каждый из них по отдельности, ибо можно хранить какие-то промежуточные данные.  UPD: Вот <a href="http://www.smira.ru/2008/10/28/web-caching-memcached-4/">ещё статья</a> по теме.</p>
]]></content:encoded>
			<wfw:commentRss>http://korchasa.ru/index.php/2008/04/dog-pile-%d1%8d%d1%84%d1%84%d0%b5%d0%ba%d1%82-%d0%ba%d0%b0%d0%ba-%d0%be%d1%82%d0%b3%d0%be%d0%bd%d1%8f%d1%82%d1%8c-%d1%81%d1%82%d0%b0%d0%b8-%d1%81%d0%be%d0%b1%d0%b0%d0%ba/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Организация &quot;кусочкового&quot; кеширование HTML</title>
		<link>http://korchasa.ru/index.php/2008/04/%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d1%83%d1%81%d0%be%d1%87%d0%ba%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8/</link>
		<comments>http://korchasa.ru/index.php/2008/04/%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d1%83%d1%81%d0%be%d1%87%d0%ba%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 18:15:00 +0000</pubDate>
		<dc:creator>korchasa</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[limb]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://korchasa.ru/?p=33</guid>
		<description><![CDATA[Навеяно парой статей на Хабре, и тем, что вчера сделал cache тег для Macro.

Зачем?
Хочется убить двух зайцев: избавиться от запросов за редко изменяемыми данными, и их отрисовки. Вообще это смахивает на попытку минимальным количеством движений сделать глобальное счастье. Можно потом перед другими фрэймворками меряться, ага.
На самом деле задача избавиться от отрисовки куска страницы вообще какая-то [...]]]></description>
			<content:encoded><![CDATA[<p>Навеяно <a href="http://habrahabr.ru/blog/php/38628.html">парой</a> <a href="http://habrahabr.ru/blog/django/39423.html">статей</a> на Хабре, и тем, что вчера сделал cache тег для <a href="http://wiki.limb-project.com/doku.php?id=limb3:ru:packages:macro">Macro</a>.<br />
<span id="more-33"></span></p>
<h3>Зачем?</h3>
<p>Хочется убить двух зайцев: избавиться от запросов за редко изменяемыми данными, и их отрисовки. Вообще это смахивает на попытку минимальным количеством движений сделать глобальное счастье. Можно потом перед другими фрэймворками меряться, ага.</p>
<p>На самом деле задача избавиться от отрисовки куска страницы вообще какая-то странная, если мы используем быстрый шаблонизатор. Application-сервера, при нормальной  арихитектуре, масштабируются легко и непринужденно, а APC, сам закэширует скомпилированный шаблон, если он компилируется в РНР-код, как это сделано в Smarty,  <a href="http://wiki.limb-project.com/doku.php?id=limb3:ru:packages:macro">Macro</a> и многих других.</p>
<p>С другой стороны, если есть простой способ закэшировать, то почему бы и нет.</p>
<h3>Откуда данные, и как заставить протухнуть кэш.</h3>
<p>Данные в шаблоне могут получаться двумя способами. Первый и традиционный это push-подход, когда контроллер заполняет какой-то <a href="http://martinfowler.com/eaaCatalog/dataTransferObject.html">data-transfer-object</a>, или в сам шаблон. Такой подход используется чаще всего, ибо это &#8220;тру MVC&#8221;! <img src='http://korchasa.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Второй подход &#8211; pull. При pull подходе в шаблоне расставляются инструкции по получению данных, в обход контроллера, напрямую от моделей, сервисов и прочих провайдеров данных. Этот способ позволяет избавиться от повторяющихся set&#8217;ов в контроллере, но не позволяет ограничить, из контроллера, их получение, и усложняет поддержку шаблонов, ибо иногда трудно понять откуда получены данные.</p>
<p>Теперь об определении развалидации кэша. Тут тоже два основных подхода. Первый &#8211; ttl(time-to-live &#8211; время жизни). Мы определяем, что список новостей, например, валиден в течении 15 минут. Основной плюс &#8211; мы уверены, что за данными скрипт будет обращаться не чаще чем раз в 15 минут, и зная частоту обращений можем точно расчитать эффективность такого кеша. Второй плюс &#8211; простота реализации. Главный же минус в том, что наш список на самом деле может измениться через секунду после построения кэша, а пользователь увидит изменения только через 15 минут.</p>
<p>Второй вариант сброса кэша &#8211; по действию. Например, тот контроллер(экшн), который отвечает за публикацию новостей, сам убивает кеш, и формирует новый (тут тоже много разных камней, типа lost updates, и прочих порождений многопоточности, но все они решаемы). Плюс &#8211; кэш всегда валиден. Первый минус это сложность реализации (нам нужно добавлять код для работы с кэшем во все места, где идет работа с данными кэша &#8211; публикация новостей, их удаление, и т.д.). Второй минус в том, что эффективность такого кэша сильно зависит от частоты изменения данных.</p>
<p>А теперь тоже самое, но в свете кэширования частей страницы.</p>
<h3>Push me. And then just touch me&#8230;</h3>
<p>Кэшировать части страницы, при push-данных хуже, чем кэшировать эти самые данные. Почему? Потому что мы &#8220;загадим&#8221; кодом работы с кэшем и шаблон, и контроллер, а из плюсов только экономия на отрисовке.</p>
<h3>Pull-данные и развалидация по действию</h3>
<p>Что мы получаем? Логика работы с кешем в шаблоне и тех контроллерах, которые отвечают за действия. Опять не тру, и лучше опять кэшировать данные, через какой-нибудь LastNewsService.</p>
<h3>Pull-данные и ttl</h3>
<p>Вот то ради чего собственно и делаются теги cache, блоки django, компоненты и т.д. Вся логика только в шаблоне (или настройках компонента). Красотища!</p>
<h3>Вывод:</h3>
<p>Кэширование части HTML имеет смысл только для pull данных с устареванием по времени. Во всех остальных случаях его плюсы, по сравнению с кэшированием данных, сводятся к экономии работы шаблонизатора.</p>
]]></content:encoded>
			<wfw:commentRss>http://korchasa.ru/index.php/2008/04/%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d1%83%d1%81%d0%be%d1%87%d0%ba%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Тесты производительности различных cache storage</title>
		<link>http://korchasa.ru/index.php/2008/03/%d1%82%d0%b5%d1%81%d1%82%d1%8b-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d1%80%d0%b0%d0%b7%d0%bb%d0%b8%d1%87%d0%bd%d1%8b%d1%85-cache/</link>
		<comments>http://korchasa.ru/index.php/2008/03/%d1%82%d0%b5%d1%81%d1%82%d1%8b-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d1%80%d0%b0%d0%b7%d0%bb%d0%b8%d1%87%d0%bd%d1%8b%d1%85-cache/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 03:50:00 +0000</pubDate>
		<dc:creator>korchasa</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://korchasa.ru/?p=2</guid>
		<description><![CDATA[
Version 0.4
Ну вот опять!
Передо мной в данный момент стоит задача сравнить популярные бытрые хранилища данных, основанные на использовании оперативной памяти. Найденные сравнения(например, вот это) не совсем подходят, так как необходима информация не только о скорости get/set операций, но и о add/delete (их предполагается использовать для создания мьютексов).

На самом деле целей тестирования две:

Найти самый быстрый и [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://korchasa.ru/wp-content/uploads/2009/01/cache.jpg" border="0" alt="" /></a><br />
Version 0.4</p>
<h3>Ну вот опять!</h3>
<p>Передо мной в данный момент стоит задача сравнить популярные бытрые хранилища данных, основанные на использовании оперативной памяти. Найденные сравнения(например, вот <a href="http://www.mysqlperformanceblog.com/2006/08/09/cache-performance-comparison/"><span style="color: #000080;"><span style="text-decoration: underline;">это</span></span></a>) не совсем подходят, так как необходима информация не только о скорости get/set операций, но и о add/delete (их предполагается использовать для создания мьютексов).<br />
<span id="more-65"></span><br />
На самом деле целей тестирования две:</p>
<ol>
<li>Найти самый быстрый и удобный cache  storage, с которым можно взаимодействовать  из PHP-шного расширения напрямую, а не  через сокеты, как у memcached.</li>
<li>Оценить разницу в скорости, между  хранилищем из пункта 1 и memcached.</li>
</ol>
<p>Итак в тестировании участвуют:</p>
<ul>
<li><a href="http://ru2.php.net/apc">APC</a> [3.0.16]</li>
<li><a>Memcached</a> [1.2.1]</li>
<li><a href="http://xcache.lighttpd.net/">XCache</a> [1.2.1]</li>
</ul>
<p>Идут лесом:</p>
<ul>
<li>
<p style="margin-bottom: 0cm;"><span style="color: #000080;"><span style="text-decoration: underline;"><a href="http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html">MySQL  memory (heap) storage</a><a href="http://www.sqlite.org/cvstrac/wiki?p=InMemoryDatabase">SQLite  database in memory</a><a href="http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html">MySQL  memory (heap) storage</a><a href="http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html">MySQL  memory (heap) storage и </a><a href="http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html">MySQL  memory (heap) storage</a></span></span></p>
</li>
<li>
<p style="margin-bottom: 0cm;"><a href="http://ru2.php.net/manual/ru/ref.shmop.php"><span style="color: #000080;"><span style="text-decoration: underline;">shmop</span></span></a></p>
</li>
<li>eAccelerator. За то, что не умеет работать  в cli-режиме.</li>
</ul>
<p>Тестирование проводилось с помощью немного измененного пакета limb/cache. Этот пакет позволит (я надеюсь <img src='http://korchasa.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  в случае нехватки  памяти на application-сервере, легко и непринуждённо (всего одна бессоная ночь) перейти на memcached.</p>
<h3>Кто на свете всех быстрее, и румяней, и милее.</h3>
<p>В этой номинации сравнивались APC и XCache, как самые известные, и исходя из других моих сексуальных предпочтений: я больше люблю заниматься им с девушками, чем с библиотеками, которые вдруг перестали поддерживаться или начали конфликтовать с другим софтом. В общем APC и XCache я больше доверяю.</p>
<p><img src="http://lh4.google.ru/korchasa/R-GyG0gbuDI/AAAAAAAAAfQ/fPfa_nSQ6gM/s800/asdasda_html_m7e9cc6b5.jpg" alt="" /></p>
<p>Загадочные цифры &#8211; это количество совершаемых операций в секунду.</p>
<table border="1" cellspacing="0">
<tbody>
<tr style="text-align: center;">
<th></th>
<th>add</th>
<th>get</th>
<th>set</th>
<th>delete</th>
</tr>
<tr>
<td>APC / integer</td>
<td>111231</td>
<td>150792</td>
<td>96590</td>
<td>154379</td>
</tr>
<tr>
<td>XCache / integer</td>
<td>40342</td>
<td>99218</td>
<td>56146</td>
<td>114956</td>
</tr>
<tr>
<td><span style="color: #0084d1;">diff</span></td>
<td><span style="color: #00ae00;">176%</span></td>
<td><span style="color: #00ae00;">52%</span></td>
<td><span style="color: #00ae00;">72%</span></td>
<td><span style="color: #00ae00;">34%</span></td>
</tr>
<tr>
<td>APC / array</td>
<td>51547</td>
<td>90296</td>
<td>42422</td>
<td>92647</td>
</tr>
<tr>
<td>XCache / array</td>
<td>23091</td>
<td>68078</td>
<td>43226</td>
<td>84848</td>
</tr>
<tr>
<td><span style="color: #0084d1;">diff</span></td>
<td><span style="color: #00ae00;">123%</span></td>
<td><span style="color: #00ae00;">33%</span></td>
<td><span style="color: #c5000b;">-2%</span></td>
<td><span style="color: #00ae00;">9%</span></td>
</tr>
<tr>
<td>APC / object</td>
<td>20373</td>
<td>20743</td>
<td>19542</td>
<td>122401</td>
</tr>
<tr>
<td>XCache / object<a href="#note1">*</a></td>
<td>10598</td>
<td>14100</td>
<td>15355</td>
<td>75741</td>
</tr>
<tr>
<td><span style="color: #0084d1;">diff</span></td>
<td><span style="color: #00ae00;">92%</span></td>
<td><span style="color: #00ae00;">47%</span></td>
<td><span style="color: #00ae00;">27%</span></td>
<td><span style="color: #00ae00;">62%</span></td>
</tr>
</tbody>
</table>
<p><dfn id="note1">* &#8211; В ходе тестирования выяснилось, что XCache не умеет работать с объектами, и их ему приходится отдавать в уже сериализованном виде. Это, конечно решается с помощью собственного драйвера, но &#8220;осадок остался&#8221; (с).</dfn></p>
<p>APC рулит! Поэтому и <a href="http://wiki.php.net/todo/php60#todo_items">войдет в PHP6</a> <img src='http://korchasa.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Выходи memcached &#8211; биться будем!</h3>
<p><img src="http://lh4.google.ru/korchasa/R-GyG0gbuCI/AAAAAAAAAfI/MZFcx4fC78E/s800/asdasda_html_5d095d6a.jpg" alt="" /></p>
<table border="1" cellspacing="0">
<tbody>
<tr style="text-align: center;">
<th></th>
<th>add</th>
<th>get</th>
<th>set</th>
<th>delete</th>
</tr>
<tr>
<td>APC / integer</td>
<td>111231</td>
<td>150792</td>
<td>96590</td>
<td>154379</td>
</tr>
<tr>
<td>Memcached / integer</td>
<td>6679</td>
<td>8436</td>
<td>6667</td>
<td>9304</td>
</tr>
<tr>
<td><span style="color: #0084d1;">diff</span></td>
<td><span style="color: #00ae00;">1565%</span></td>
<td><span style="color: #00ae00;">1687%</span></td>
<td><span style="color: #00ae00;">1349%</span></td>
<td><span style="color: #00ae00;">1559%</span></td>
</tr>
<tr>
<td>APC / array</td>
<td>51547</td>
<td>90296</td>
<td>42422</td>
<td>92647</td>
</tr>
<tr>
<td>Memcached / array</td>
<td>6783</td>
<td>8319</td>
<td>6854</td>
<td>9142</td>
</tr>
<tr>
<td><span style="color: #0084d1;">diff</span></td>
<td><span style="color: #00ae00;">660%</span></td>
<td><span style="color: #00ae00;">985%</span></td>
<td><span style="color: #00ae00;">519%</span></td>
<td><span style="color: #00ae00;">913%</span></td>
</tr>
<tr>
<td>APC / object</td>
<td>20373</td>
<td>20743</td>
<td>19542</td>
<td>122401</td>
</tr>
<tr>
<td>Memcached / object</td>
<td>5088</td>
<td>5648</td>
<td>5143</td>
<td>9081</td>
</tr>
<tr>
<td><span style="color: #0084d1;">diff</span></td>
<td><span style="color: #00ae00;">300%</span></td>
<td><span style="color: #00ae00;">267%</span></td>
<td><span style="color: #00ae00;">280%</span></td>
<td><span style="color: #00ae00;">1248%</span></td>
</tr>
</tbody>
</table>
<p>Выводы делаейте сами, а я спать пойду.</p>
<p>Исходники тестов можно <a href="http://korchasa.googlepages.com/cache_storages_bench.tar.bz2">скачать</a> и поправить <img src='http://korchasa.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://korchasa.ru/index.php/2008/03/%d1%82%d0%b5%d1%81%d1%82%d1%8b-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8-%d1%80%d0%b0%d0%b7%d0%bb%d0%b8%d1%87%d0%bd%d1%8b%d1%85-cache/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>4 в 1 &#8211; простой комбайн для оптимизации статики</title>
		<link>http://korchasa.ru/index.php/2008/01/4-%d0%b2-1-%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9-%d0%ba%d0%be%d0%bc%d0%b1%d0%b0%d0%b9%d0%bd-%d0%b4%d0%bb%d1%8f-%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8-%d1%81%d1%82/</link>
		<comments>http://korchasa.ru/index.php/2008/01/4-%d0%b2-1-%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9-%d0%ba%d0%be%d0%bc%d0%b1%d0%b0%d0%b9%d0%bd-%d0%b4%d0%bb%d1%8f-%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8-%d1%81%d1%82/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 01:39:00 +0000</pubDate>
		<dc:creator>korchasa</dc:creator>
				<category><![CDATA[Анонсы]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[кэширование]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[разметка]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://korchasa.ru/?p=38</guid>
		<description><![CDATA[Наткнулся на интересную библиотеку. Вот перевод интродакшена:

Как  уменьшить время загрузки сайта в 5 раз, тремя строчками кода.
Есть 4 относительно простых способа, с помощью которых вы можете уменьшить время  загрузки страницы:

делать меньше HTTP запросов
выставлять expires на далекое будущее
сжимать компоненты вашей страницы gzip&#8217;ом
обфускачивать ваши JavaScript и CSS файлы, а так же сам HTML-код

После моего поста [...]]]></description>
			<content:encoded><![CDATA[<p>Наткнулся на <a href="http://aciddrop.com/2008/01/21/boost-your-website-load-time-with-3-lines-of-code/">интересную библиотеку</a>. Вот перевод интродакшена:</p>
<blockquote>
<h3>Как  уменьшить время загрузки сайта в 5 раз, тремя строчками кода.</h3>
<p>Есть 4 относительно простых способа, с помощью которых вы можете уменьшить время  загрузки страницы:</p>
<ul>
<li>делать меньше HTTP запросов</li>
<li>выставлять expires на далекое будущее</li>
<li>сжимать компоненты вашей страницы gzip&#8217;ом</li>
<li>обфускачивать ваши JavaScript и CSS файлы, а так же сам HTML-код</li>
</ul>
<p>После моего поста об <a href="http://aciddrop.com/2008/01/03/automatically-join-your-javascript-and-css-into-a-single-file/">объединении CSS и JavaScript файлов</a>, я написал PHP-скрипт, который будет автоматически применять все вышеперечисленные способы. Все, что вам нужно сделать, это поместить следующий код в начало своего PHP-файла:</p>
<pre lang="php">require_once ( 'class.compressor.php' ) ;
$compressor = new compressor ( 'css,javascript,page' ) ;</pre>
<p>А этот код в конец:</p>
<pre lang="php">$compressor -&gt; finish ( ) ;</pre>
</blockquote>
<p><span id="more-38"></span><br />
Сравните:<br />
<img src="http://aciddrop.com/aciddrop/minify/uncompressed-small.gif" border="0" alt="Firebug before compression" /><br />
<img src="http://aciddrop.com/aciddrop/minify/compressed-small.gif" border="0" alt="Firebug before compression" /></p>
<p>Библиотека довольно интересная. Особенно для небольших сайтов, где еще можно отдавать весь js и css сразу. Да и в плане выставления правильных заголовков для заgzipенных данных есть чему поучиться.</p>
<p>Примеры <a href="http://aciddrop.com/aciddrop/minify/">с использованием gzip</a>, <a href="http://aciddrop.com/aciddrop/minify/compress_me.php?compress=no">без него</a>.</p>
<p>Скачать можно <a href="http://aciddrop.com/2008/01/23/site-speed-boost-script-updated/">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://korchasa.ru/index.php/2008/01/4-%d0%b2-1-%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9-%d0%ba%d0%be%d0%bc%d0%b1%d0%b0%d0%b9%d0%bd-%d0%b4%d0%bb%d1%8f-%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8-%d1%81%d1%82/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
