Сразу оговорюсь, что речь пойдёт совсем не о боксе, а о WordPress и bbPress.
Разработчики плагинов WordPress и bbPress используют две функции для расширения функциональности WordPress/bbPress: это add_action() и add_filter(). Первая служит для установки обработчика некоторого события, вторая — для установки фильтра. Под хуком подразумевается обобщённое понятие (либо фильтр, либо обработчик).
Как показывает практика, большая часть времени генерации страницы уходит именно на вызов обработчиков и фильтров. И когда возникает вопрос: почему время генерации страницы такое большое, а запроса всего три, и они выполняются за сотые доли секунды, на помощь приходит данный плагин.
В отличие от WP Tuner, которому явно нужно указывать, какие события нужно профилировать, SJ Hook Profiler автоматически определяет все используемые хуки и устанавливает обработчики, измеряющие их время работы. На выходе получается что-то вида данной таблицы:
| 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.
Меня зовут
47 и 61 строку в sj-hook-profiler.php нужно поменять местами
SJ Hook Profiler 0.2.
Страница плагина переехала сюда.
Извините, форма комментирования закрыта в данный момент.