{"id":320337,"date":"2026-06-11T14:49:18","date_gmt":"2026-06-11T14:49:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/mits-profiler\/"},"modified":"2026-06-11T14:48:27","modified_gmt":"2026-06-11T14:48:27","slug":"mits-profiler","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/mits-profiler\/","author":23503449,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"trunk","tested":"7.0","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"MITS Profiler","header_author":"MITS","header_description":"Lightweight WordPress performance profiler. No HTTP requests, no curl \u2014 works behind Cloudflare and any proxy.","assets_banners_color":"","last_updated":"2026-06-11 14:48:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/mits.pl","rating":0,"author_block_rating":0,"active_installs":0,"downloads":21,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.1":{"tag":"1.3.1","author":"wpaluchmits","date":"2026-06-11 14:48:46"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3568999,"resolution":"1","location":"assets","locale":"","width":646,"height":160},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3568999,"resolution":"2","location":"assets","locale":"","width":2246,"height":610},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3568999,"resolution":"3","location":"assets","locale":"","width":2936,"height":838}},"screenshots":{"1":"Plugin header \u2014 admin panel overview with site stats and quick-start launcher.","2":"Admin panel \u2014 page count, OPcache hit rate and SAVEQUERIES status.","3":"Profiler bar \u2014 Timeline tab showing hook timing from profiler_init to render."}},"plugin_section":[],"plugin_tags":[153,94,4073,247,6246],"plugin_category":[54,59],"plugin_contributors":[264685],"plugin_business_model":[],"class_list":["post-320337","plugin","type-plugin","status-publish","hentry","plugin_tags-database","plugin_tags-debug","plugin_tags-hooks","plugin_tags-performance","plugin_tags-profiler","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-wpaluchmits","plugin_committers-wpaluchmits"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/mits-profiler.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/mits-profiler\/assets\/screenshot-1.png?rev=3568999","caption":"Plugin header \u2014 admin panel overview with site stats and quick-start launcher."},{"src":"https:\/\/ps.w.org\/mits-profiler\/assets\/screenshot-2.png?rev=3568999","caption":"Admin panel \u2014 page count, OPcache hit rate and SAVEQUERIES status."},{"src":"https:\/\/ps.w.org\/mits-profiler\/assets\/screenshot-3.png?rev=3568999","caption":"Profiler bar \u2014 Timeline tab showing hook timing from profiler_init to render."}],"raw_content":"<!--section=description-->\n<p>MITS Profiler adds a diagnostic bar to any page by appending <code>?mits_prof=1<\/code> to the URL. It captures timing data from the moment PHP starts and presents it in a dark-themed panel at the bottom of the page \u2014 visible only to logged-in administrators.<\/p>\n\n<p><strong>Tabs included:<\/strong><\/p>\n\n<ul>\n<li><strong>Timeline<\/strong> \u2014 absolute and relative timing between WordPress lifecycle hooks (plugins_loaded \u2192 init \u2192 wp_head \u2192 wp_footer)<\/li>\n<li><strong>Hooks<\/strong> \u2014 top 50 slowest action\/filter hooks with total time and call count<\/li>\n<li><strong>Options<\/strong> \u2014 most-queried WordPress options + full autoload audit with sizes<\/li>\n<li><strong>Plugins<\/strong> \u2014 loaded PHP file sizes per plugin (proxy for load time)<\/li>\n<li><strong>Assets<\/strong> \u2014 all enqueued scripts and styles, external ones highlighted<\/li>\n<li><strong>HTTP<\/strong> \u2014 outgoing wp_remote_* requests with response time and status<\/li>\n<li><strong>SQL<\/strong> \u2014 all database queries with slow-query highlighting (requires SAVEQUERIES)<\/li>\n<li><strong>PHP<\/strong> \u2014 PHP version, OPcache status and hit rate, memory and execution limits<\/li>\n<\/ul>\n\n<p><strong>Key features:<\/strong><\/p>\n\n<ul>\n<li>Zero HTTP loopback \u2014 works behind Cloudflare, reverse proxies and strict firewall rules<\/li>\n<li>No external dependencies or requests<\/li>\n<li>Admin-only: the panel and all data are never shown to guests<\/li>\n<li>Export to JSON or CSV for offline analysis<\/li>\n<li>Works on front-end pages, WooCommerce pages, and WP Admin<\/li>\n<\/ul>\n\n<p><strong>SQL query logging<\/strong> requires adding the following to <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define('SAVEQUERIES', true);\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>mits-profiler<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin in <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Go to <strong>MITS Profiler<\/strong> in the admin menu to open the control panel<\/li>\n<li>Click <strong>Profiluj w nowej karcie<\/strong> or manually append <code>?mits_prof=1<\/code> to any URL<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20slow%20down%20my%20site%20for%20visitors%3F\"><h3>Does this plugin slow down my site for visitors?<\/h3><\/dt>\n<dd><p>No. The profiler only activates when <code>?mits_prof=1<\/code> is present in the URL, and even then it only renders its output for logged-in administrators. Regular visitors are completely unaffected.<\/p><\/dd>\n<dt id=\"does%20it%20work%20behind%20cloudflare%3F\"><h3>Does it work behind Cloudflare?<\/h3><\/dt>\n<dd><p>Yes. Unlike profilers that rely on HTTP loopback requests (which Cloudflare blocks), MITS Profiler measures time inline within the same PHP process \u2014 no outgoing requests needed.<\/p><\/dd>\n<dt id=\"how%20do%20i%20see%20database%20queries%3F\"><h3>How do I see database queries?<\/h3><\/dt>\n<dd><p>Add <code>define('SAVEQUERIES', true);<\/code> to your <code>wp-config.php<\/code> before the line <code>\/* That's all, stop editing! *\/<\/code>. Remember to remove it when done, as it adds overhead on every page load.<\/p><\/dd>\n<dt id=\"the%20panel%20does%20not%20appear\"><h3>The panel does not appear<\/h3><\/dt>\n<dd><p>Make sure you are logged in as an administrator and that the URL contains <code>?mits_prof=1<\/code> (or <code>&amp;mits_prof=1<\/code> if the URL already has a query string).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>All CSS\/JS now enqueued via wp_add_inline_style() and wp_add_inline_script() \u2014 no direct \/ output<\/li>\n<li>Admin page assets enqueued through admin_enqueue_scripts hook<\/li>\n<li>Static profiler bar functions extracted from render() to a registered script handle<\/li>\n<li>Added wpaluchmits to Contributors<\/li>\n<li>All echoed variables escaped or cast to int\/float; $row() closure wraps every cell in wp_kses()<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added full MITS wordmark logo in admin panel header<\/li>\n<li>Admin notices from other plugins are now hidden on the profiler page<\/li>\n<li>Fixed $_SERVER sanitization (wp_unslash + sanitize_text_field)<\/li>\n<li>Added phpcs:ignore annotations for intentional direct DB queries<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added SQL tab with slow-query highlighting (requires SAVEQUERIES)<\/li>\n<li>Added PHP environment tab with OPcache stats<\/li>\n<li>Added JSON and CSV export buttons<\/li>\n<li>Added HTTP outgoing request tracking via wp_remote_*<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: Timeline, Hooks, Options, Plugins, Assets tabs<\/li>\n<\/ul>","raw_excerpt":"Lightweight WordPress performance profiler. No HTTP loopback requests \u2014 works behind Cloudflare and any proxy.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/320337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=320337"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpaluchmits"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=320337"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=320337"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=320337"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=320337"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=320337"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=320337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}