<?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>Статьи про web-разработку, PHP, CakePHP. &#187; решения проблем</title>
	<atom:link href="http://blog.michas.ru/category/resheniya-problem/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.michas.ru</link>
	<description>php, mysql, javascript, cakephp, jquery</description>
	<lastBuildDate>Wed, 24 Aug 2011 15:04:54 +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>CakePHP и относительные пути url в JavaScript</title>
		<link>http://blog.michas.ru/2011/04/04/cakephp-and-relative-url-in-javascript/</link>
		<comments>http://blog.michas.ru/2011/04/04/cakephp-and-relative-url-in-javascript/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 09:07:48 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[решения проблем]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[relative]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=150</guid>
		<description><![CDATA[Способность web-приложения работать не только в корневом каталоге сайта, но и в любом подкаталоге делает его более привлекательным для использования. Если при использовании CakePHP соблюдать стандарты и для формирования url использовать $html->link() и Router::url() то ссылки в приложении всегда будут с учетом того из какого каталога оно запущенно. Но, как всегда есть &#171;но&#187;. JavaScript ничего [...]]]></description>
			<content:encoded><![CDATA[<p>Способность web-приложения работать не только в корневом каталоге сайта, но и в любом подкаталоге делает его более привлекательным для использования. </p>
<p>Если при использовании CakePHP соблюдать стандарты и для формирования url использовать $html->link() и Router::url() то ссылки в приложении всегда будут с учетом того из какого каталога оно запущенно.</p>
<p>Но, как всегда есть &laquo;но&raquo;. JavaScript ничего не подозревает о том из какого каталога запущено приложение. Из-за этого возникает проблема с url для AJAX запросов. Ниже я приведу один из способов решения этой проблемы.</p>
<p>Первым делом добавим во все layout&#8217;ы строчку в секцию head:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;base href=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> Router<span style="color: #339933;">::</span><span style="color: #004000;">url</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; /&gt;</pre></div></div>

<p><span id="more-150"></span></p>
<p>Теперь добавим JavaScript функцию в js файл который доступен для всего приложения:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">url</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">return</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'base'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span>url.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Все. Теперь осталось только использовать решение.<br />
Пример получения данных:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#foo'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span>$.<span style="color: #660066;">url</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/posts/index));</span></pre></div></div>

<p>*В статье приведены примеры с использованием jQuery.<br />
**Были использованы материалы с сайта <a href="http://debuggable.com">http://debuggable.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2011/04/04/cakephp-and-relative-url-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Оптимизация PhpShop</title>
		<link>http://blog.michas.ru/2009/06/19/phpshop-optimizatio/</link>
		<comments>http://blog.michas.ru/2009/06/19/phpshop-optimizatio/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 16:26:35 +0000</pubDate>
		<dc:creator>michas</dc:creator>
				<category><![CDATA[решения проблем]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpshop]]></category>
		<category><![CDATA[идиотизм]]></category>
		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://blog.michas.ru/?p=34</guid>
		<description><![CDATA[Так уж случилось, что один из наших клиентов заказал нам добавить в его интернет магазин несколько десятков тысяч товаров. Магазин у него работал на небезызвестном PHPShop . До этого момента, я с этим «чудом» не встречался. После добавления первых 5000 товаров магазин слег и мог показывать только белую страницу.  Тех поддержка отвечала что это все [...]]]></description>
			<content:encoded><![CDATA[<p>Так уж случилось, что один из наших клиентов заказал нам добавить в его интернет магазин несколько десятков тысяч товаров. Магазин у него работал на небезызвестном <a title="PHPShop" href="http://phpshop.ru/">PHPShop</a> . До этого момента, я с этим «чудом» не встречался. После добавления первых 5000 товаров магазин слег и мог показывать только белую страницу.  Тех поддержка отвечала что это все из-за хостера(MasterHost). Я им поверил и решил опробовать все на локальном веб-сервере. Магазин показывал ту же картину. Причем в списке задач отображалось, что Apache «съедает» 200 Мб оперативной памяти. Пришлось лезть во внутренности…</p>
<p><span id="more-34"></span></p>
<p>После недолгих поисков было обнаружено, что при выводе товаров скрипт не делал запрос к базе, чтобы получить конкретный товар. Оказалось что при запуске скрипта все товары из базы помещаются в глобальный массив, а затем, когда нужен определенный товар, он брался из этого массива. Причем занимался этим почему-то модуль, который по идее должен отвечать за кэширование(cache.inc.php). Мне это показалось очень странным. Переписывать весь скрипт, чтобы данные брались из БД только когда они нужны, было долго (этот глобальный массив использовался очень часто) и не было времени, так как заказчик торопил. Надо было искать другой выход и он был найден.</p>
<p>Необходимо было сделать так, чтобы, данные в массив попадали только при обращении к нему. После недолгих поисков был найден интерфейс ArrayAccess, который позволяет обращаться к объекту как к элементу массива. За пару часов все это было реализовано. Теперь данные в массив попадали только при обращении к нему. Так же дополнительно все полученные данные кешировались чтобы избежать дополнительную нагрузку на MySQL сервер.</p>
<p>Решение проблемы не только восстановило работоспособность магазина, но и уменьшило время генерации страницы в ДВА раза.</p>
<p>Если кому-то интересно посмотреть на код решения проблемы, могу опубликовать его целиком в следующем посте.</p>
<p>Если разработчики PhpShop увидят этот пост, я бы хотел знать, чем они руководствовались, создавая глобальный массив со всеми товарами заранее.<em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.michas.ru/2009/06/19/phpshop-optimizatio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

