Vladimir Kolesnikov Меня зовут Владимир, я программист-фрилансер (PHP, Node.js, C/C++, Qt). Ещё занимаюсь администрированием серверов и техническим переводом. Крестиком вышивать не умею.
Сен 222009
 

Поиск слабых мест в и

Сразу оговорюсь, что речь пойдёт совсем не о боксе, а о WordPress и bbPress.

Разработчики плагинов WordPress и bbPress используют две функции для расширения функциональности WordPress/bbPress: это add_action() и add_filter(). Первая служит для установки обработчика некоторого события, вторая — для установки фильтра. Под хуком подразумевается обобщённое понятие (либо фильтр, либо обработчик).

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

В отличие от WP Tuner, которому явно нужно указывать, какие события нужно профилировать, автоматически определяет все используемые хуки и устанавливает обработчики, измеряющие их время работы. На выходе получается что-то вида данной таблицы:

Hook Name Total Time Invocations Average Time
pre_option_gmt_offset 0.000169 1 0.000169
option_blog_charset 0.000405 11 0.000037
plugins_loaded 0.014295 1 0.014295
option_siteurl 0.000810 26 0.000031
option_home 0.004852 160 0.000030
sanitize_comment_cookies 0.000117 1 0.000117
option_category_base 0.000029 1 0.000029
option_tag_base 0.000027 1 0.000027
setup_theme 0.000030 1 0.000030
wp_default_scripts 0.001951 1 0.001951
set_current_user 0.000114 1 0.000114
init 0.011603 1 0.011603
widgets_init 0.003384 1 0.003384
wp_default_styles 0.000349 1 0.000349
query_vars 0.000036 1 0.000036
sanitize_title 0.001518 17 0.000089
posts_where 0.000033 1 0.000033
the_posts 0.000127 1 0.000127
template_redirect 0.000541 1 0.000541
bloginfo 0.002297 8 0.000287
term_name 0.000621 2 0.000310
term_description 0.000982 2 0.000491
single_post_title 0.000468 2 0.000234
wp_title 0.000747 2 0.000373
wp_head 0.020773 1 0.020773
comments_open 0.000373 4 0.000093
the_title 0.011747 46 0.000255
wp_print_styles 0.000175 2 0.000088
style_loader_src 0.000330 9 0.000037
wp_print_scripts 0.000440 1 0.000440
print_scripts_array 0.000050 1 0.000050
wp_list_pages 0.000305 1 0.000305
the_author 0.000534 2 0.000267
the_content 1.004469 1 1.004469
comment_text 0.001105 1 0.001105
pings_open 0.000087 1 0.000087
comment_form 0.007084 1 0.007084
widget_title 0.001137 4 0.000284
list_cats 0.004768 22 0.000217
wp_footer 0.009798 1 0.009798
wp_print_footer_scripts 0.000115 1 0.000115

Из таблицы видно, что слабое место — это вызов фильтра the_content (вызов более одной секунды), и копать нужно именно в сторону оптимизации фильтров the_content. Пока не поддерживается профилирование каждого обработчика (то есть делаются замеры до вызова первого обработчика the_content и после вызова последнего), но это в планах.

Одна из особенностей плагина — поддержка как WordPress, так и bbPress (правда, пришлось немного поколдовать).

По умолчанию плагин активен только для администратора (WordPress) и Key Master (bbPress); изменить это можно, повесив обработчик на фильтр enable_hook_profiler (должен вернуть true, если профайлер нужно активировать и false в противном случае).

Скачать плагин SJ Hook Profiler 0.1.
Скачать плагин SJ Hook Profiler 0.2.

  5 Ответов в “SJ Hook Profiler — плагин для измерения производительности хуков”

Comments (3) Pingbacks (2)
  1. 47 и 61 строку в sj-hook-profiler.php нужно поменять местами :)

  2. SJ Hook Profiler 0.2.

    Страница плагина переехала сюда.

Извините, форма комментирования закрыта в данный момент.