<?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>Ars Longa, Vita Brevis &#187; SJ Hook Profiler</title>
	<atom:link href="http://blog.sjinks.pro/tag/sj-hook-profiler/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sjinks.pro</link>
	<description>Quod scripsi, scripsi</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:56:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SJ Hook Profiler — плагин для измерения производительности хуков</title>
		<link>http://blog.sjinks.pro/wordpress/plugins/642-sj-hook-profiler/</link>
		<comments>http://blog.sjinks.pro/wordpress/plugins/642-sj-hook-profiler/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 23:01:11 +0000</pubDate>
		<dc:creator>Vladimir</dc:creator>
				<category><![CDATA[bbPress]]></category>
		<category><![CDATA[Плагины WordPress]]></category>
		<category><![CDATA[SJ Hook Profiler]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[оптимизация]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://blog.sjinks.pro/?p=642</guid>
		<description><![CDATA[Поиск слабых мест в WordPress и bbPress Сразу оговорюсь, что речь пойдёт совсем не о боксе, а о WordPress и bbPress. Разработчики плагинов WordPress и bbPress используют две функции для расширения функциональности WordPress/bbPress: это add_action() и add_filter(). Первая служит для установки обработчика некоторого события, вторая — для установки фильтра. Под хуком подразумевается обобщённое понятие (либо фильтр, [...]<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/642-sj-hook-profiler/">источник</a> обязательно.</p>]]></description>
			<content:encoded><![CDATA[<h2><em>Поиск слабых мест в <a href="http://blog.sjinks.pro/tag/wordpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  WordPress">WordPress</a> и <a href="http://blog.sjinks.pro/tag/bbpress/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  bbPress">bbPress</a></em></h2>
<p>Сразу оговорюсь, что речь пойдёт совсем не о боксе, а о WordPress и bbPress.</p>
<p>Разработчики плагинов WordPress и bbPress используют две функции для расширения функциональности WordPress/bbPress: это <span class="codebox"><code class="php">add_action<span class="br0">&#40;</span><span class="br0">&#41;</span></code></span> и <span class="codebox"><code class="php">add_filter<span class="br0">&#40;</span><span class="br0">&#41;</span></code></span>. Первая служит для установки обработчика некоторого события, вторая — для установки фильтра. Под <dfn>хуком</dfn> подразумевается обобщённое понятие (либо фильтр, либо обработчик).</p>
<p>Как показывает практика, б<em>о</em>льшая часть времени генерации страницы уходит именно на вызов обработчиков и фильтров. И когда возникает вопрос: почему время генерации страницы такое большое, а запроса всего три, и они выполняются за сотые доли секунды, на помощь приходит данный <a href="http://blog.sjinks.pro/tag/plugin/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  плагин">плагин</a>.<span id="more-642"></span></p>
<p>В отличие от WP Tuner, которому явно нужно указывать, какие события нужно профилировать, <a href="http://blog.sjinks.pro/tag/sj-hook-profiler/" class="st_tag internal_tag" rel="tag" title="Записи, помеченные с  SJ Hook Profiler">SJ Hook Profiler</a> автоматически определяет <em>все</em> используемые хуки и устанавливает обработчики, измеряющие их время работы. На выходе получается что-то вида данной таблицы:</p>
<table class="hookdebug">
<thead>
<tr>
<th>Hook Name</th>
<th>Total Time</th>
<th>Invocations</th>
<th>Average Time</th>
</tr>
</thead>
<tbody>
<tr>
<td>pre_option_gmt_offset</td>
<td>0.000169</td>
<td>1</td>
<td>0.000169</td>
</tr>
<tr>
<td>option_blog_charset</td>
<td>0.000405</td>
<td>11</td>
<td>0.000037</td>
</tr>
<tr>
<td>plugins_loaded</td>
<td>0.014295</td>
<td>1</td>
<td>0.014295</td>
</tr>
<tr>
<td>option_siteurl</td>
<td>0.000810</td>
<td>26</td>
<td>0.000031</td>
</tr>
<tr>
<td>option_home</td>
<td>0.004852</td>
<td>160</td>
<td>0.000030</td>
</tr>
<tr>
<td>sanitize_comment_cookies</td>
<td>0.000117</td>
<td>1</td>
<td>0.000117</td>
</tr>
<tr>
<td>option_category_base</td>
<td>0.000029</td>
<td>1</td>
<td>0.000029</td>
</tr>
<tr>
<td>option_tag_base</td>
<td>0.000027</td>
<td>1</td>
<td>0.000027</td>
</tr>
<tr>
<td>setup_theme</td>
<td>0.000030</td>
<td>1</td>
<td>0.000030</td>
</tr>
<tr>
<td>wp_default_scripts</td>
<td>0.001951</td>
<td>1</td>
<td>0.001951</td>
</tr>
<tr>
<td>set_current_user</td>
<td>0.000114</td>
<td>1</td>
<td>0.000114</td>
</tr>
<tr>
<td>init</td>
<td>0.011603</td>
<td>1</td>
<td>0.011603</td>
</tr>
<tr>
<td>widgets_init</td>
<td>0.003384</td>
<td>1</td>
<td>0.003384</td>
</tr>
<tr>
<td>wp_default_styles</td>
<td>0.000349</td>
<td>1</td>
<td>0.000349</td>
</tr>
<tr>
<td>query_vars</td>
<td>0.000036</td>
<td>1</td>
<td>0.000036</td>
</tr>
<tr>
<td>sanitize_title</td>
<td>0.001518</td>
<td>17</td>
<td>0.000089</td>
</tr>
<tr>
<td>posts_where</td>
<td>0.000033</td>
<td>1</td>
<td>0.000033</td>
</tr>
<tr>
<td>the_posts</td>
<td>0.000127</td>
<td>1</td>
<td>0.000127</td>
</tr>
<tr>
<td>template_redirect</td>
<td>0.000541</td>
<td>1</td>
<td>0.000541</td>
</tr>
<tr>
<td>bloginfo</td>
<td>0.002297</td>
<td>8</td>
<td>0.000287</td>
</tr>
<tr>
<td>term_name</td>
<td>0.000621</td>
<td>2</td>
<td>0.000310</td>
</tr>
<tr>
<td>term_description</td>
<td>0.000982</td>
<td>2</td>
<td>0.000491</td>
</tr>
<tr>
<td>single_post_title</td>
<td>0.000468</td>
<td>2</td>
<td>0.000234</td>
</tr>
<tr>
<td>wp_title</td>
<td>0.000747</td>
<td>2</td>
<td>0.000373</td>
</tr>
<tr>
<td>wp_head</td>
<td>0.020773</td>
<td>1</td>
<td>0.020773</td>
</tr>
<tr>
<td>comments_open</td>
<td>0.000373</td>
<td>4</td>
<td>0.000093</td>
</tr>
<tr>
<td>the_title</td>
<td>0.011747</td>
<td>46</td>
<td>0.000255</td>
</tr>
<tr>
<td>wp_print_styles</td>
<td>0.000175</td>
<td>2</td>
<td>0.000088</td>
</tr>
<tr>
<td>style_loader_src</td>
<td>0.000330</td>
<td>9</td>
<td>0.000037</td>
</tr>
<tr>
<td>wp_print_scripts</td>
<td>0.000440</td>
<td>1</td>
<td>0.000440</td>
</tr>
<tr>
<td>print_scripts_array</td>
<td>0.000050</td>
<td>1</td>
<td>0.000050</td>
</tr>
<tr>
<td>wp_list_pages</td>
<td>0.000305</td>
<td>1</td>
<td>0.000305</td>
</tr>
<tr>
<td>the_author</td>
<td>0.000534</td>
<td>2</td>
<td>0.000267</td>
</tr>
<tr>
<td>the_content</td>
<td>1.004469</td>
<td>1</td>
<td>1.004469</td>
</tr>
<tr>
<td>comment_text</td>
<td>0.001105</td>
<td>1</td>
<td>0.001105</td>
</tr>
<tr>
<td>pings_open</td>
<td>0.000087</td>
<td>1</td>
<td>0.000087</td>
</tr>
<tr>
<td>comment_form</td>
<td>0.007084</td>
<td>1</td>
<td>0.007084</td>
</tr>
<tr>
<td>widget_title</td>
<td>0.001137</td>
<td>4</td>
<td>0.000284</td>
</tr>
<tr>
<td>list_cats</td>
<td>0.004768</td>
<td>22</td>
<td>0.000217</td>
</tr>
<tr>
<td>wp_footer</td>
<td>0.009798</td>
<td>1</td>
<td>0.009798</td>
</tr>
<tr>
<td>wp_print_footer_scripts</td>
<td>0.000115</td>
<td>1</td>
<td>0.000115</td>
</tr>
</tbody>
</table>
<p>Из таблицы видно, что слабое место — это вызов фильтра <code>the_content</code> (вызов более одной секунды), и копать нужно именно в сторону оптимизации фильтров <code>the_content</code>. Пока не поддерживается профилирование каждого обработчика (то есть делаются замеры до вызова первого обработчика <code>the_content</code> и после вызова последнего), но это в планах.</p>
<p>Одна из особенностей плагина — поддержка как WordPress, так и bbPress (правда, пришлось немного поколдовать).</p>
<p>По умолчанию плагин активен только для администратора (WordPress) и Key Master (bbPress); изменить это можно, повесив обработчик на фильтр <code>enable_hook_profiler</code> (должен вернуть <span class="codebox"><code class="php"><span class="kw4">true</span></code></span>, если профайлер нужно активировать и <span class="codebox"><code class="php"><span class="kw4">false</span></code></span> в противном случае).</p>
<p><strong><a href="http://d.sjinks.pro/wordpress/sj-hook-profiler-0.1.zip">Скачать плагин SJ Hook Profiler 0.1</a></strong>.<br />
<strong><a href="http://d.sjinks.pro/wordpress/sj-hook-profiler-0.2.zip">Скачать плагин SJ Hook Profiler 0.2</a></strong>.</p>
<p>© 2012 <a href="http://blog.sjinks.pro">Ars Longa, Vita Brevis</a>. Все права защищены. Перепубликация материалов без разрешения автора запрещена.</p>
<p>При использовании материалов блога наличие активной не закрытой от индексирования ссылки на <a href="http://blog.sjinks.pro/wordpress/plugins/642-sj-hook-profiler/">источник</a> обязательно.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.sjinks.pro/wordpress/plugins/642-sj-hook-profiler/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

