{"id":3298,"date":"2025-02-14T10:21:47","date_gmt":"2025-02-14T10:21:47","guid":{"rendered":"https:\/\/s-o-s.net\/optimization-detective\/"},"modified":"2025-02-14T10:21:47","modified_gmt":"2025-02-14T10:21:47","slug":"optimization-detective","status":"publish","type":"post","link":"https:\/\/s-o-s.net\/en_gb\/optimization-detective\/","title":{"rendered":"Optimization Detective"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<article id=\"post-191163\" class=\"alignwide post-191163 plugin type-plugin status-publish hentry plugin_tags-optimization plugin_tags-performance plugin_tags-rum plugin_category-media plugin_category-security-and-spam-protection plugin_contributors-wordpressdotorg plugin_business_model-community plugin_committers-performanceteam plugin_committers-westonruter\">\n<div class=\"plugin-banner\" id=\"plugin-banner-optimization-detective\"><\/div>\n<header class=\"plugin-header\">\n<div class=\"entry-heading-container\">\n<div>\n<div class=\"entry-thumbnail\">\n\t\t\t\t\t<img decoding=\"async\" class=\"plugin-icon\" src=\"https:\/\/ps.w.org\/optimization-detective\/assets\/icon.svg?rev=3098164\" alt=\"\">\t\t\t\t<\/div>\n<div>\n<h1 class=\"plugin-title\">Optimization Detective<\/h1>\n<p>\t\t\t\t\t<span class=\"byline\">By <span class=\"author vcard\"><a target=\"_blank\" class=\"url fn n\" href=\"https:\/\/profiles.wordpress.org\/performanceteam\/\" rel=\"noopener\">performanceteam<\/a><\/span><\/span>\n\t\t\t\t<\/div>\n<\/p><\/div>\n<div class=\"plugin-actions\">\n<div class=\"wp-block-button is-small plugin-download download-button\"><a target=\"_blank\" class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/downloads.wordpress.org\/plugin\/optimization-detective.1.0.0-beta2.zip\" rel=\"noopener\">Download<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/header>\n<p><!-- .entry-header --><\/p>\n<p>\t<span id=\"description\"><\/span><br \/>\n\t<span id=\"reviews\"><\/span><br \/>\n\t<span id=\"installation\"><\/span><br \/>\n\t<span id=\"developers\"><\/span><br \/>\n\t<span id=\"advanced\" class=\"\"><\/span><br \/>\n\t<span id=\"section-links\"><\/p>\n<ul class=\"tabs clear\">\n<li id=\"tablink-description\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/optimization-detective\/#description\" rel=\"noopener\">Details<\/a><\/li>\n<li id=\"tablink-reviews\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/optimization-detective\/#reviews\" rel=\"noopener\">Reviews<\/a><\/li>\n<li id=\"tablink-installation\">\n\t\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/optimization-detective\/#installation\" rel=\"noopener\">Installation<\/a>\n\t\t\t<\/li>\n<li id=\"tablink-developers\"><a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/optimization-detective\/#developers\" rel=\"noopener\">Development<\/a><\/li>\n<\/ul>\n<div id=\"link-support\">\n\t\t\t<a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/optimization-detective\/\" rel=\"noopener\">Support<\/a>\n\t\t<\/div>\n<p>\t<\/span><br \/>\n\t<script type=\"text\/javascript\">if ( '#changelog' == window.location.hash ) { window.setTimeout( function() { window.location.hash=\"#developers\"; }, 10 ); }<\/script><\/p>\n<div class=\"entry-content\">\n<div id=\"tab-description\" class=\"plugin-description section\">\n<h2 id=\"description-header\">Description<\/h2>\n<p>This plugin captures real user metrics about what elements are displayed on the page across a variety of device form factors (e.g. desktop, tablet, and phone) in order to apply loading optimizations which are not possible with WordPress\u2019s current server-side heuristics.<\/p>\n<p>This plugin is a dependency which does not provide end-user functionality on its own. For that, please install the dependent plugin <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/image-prioritizer\/\" rel=\"ugc noopener\">Image Prioritizer<\/a> or <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/embed-optimizer\/\" rel=\"ugc noopener\">Embed Optimizer<\/a> (among <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/labels\/%5BPlugin%5D%20Optimization%20Detective\" rel=\"nofollow ugc noopener\">others<\/a> to come from the WordPress Core Performance team). There are currently <strong>no settings<\/strong> and no user interface for this plugin since it is designed to work without any configuration.<\/p>\n<p>Your site must have the <strong>REST API accessible<\/strong> to frontend visitors since this is how metrics are collected about how a page should be optimized.<\/p>\n<p>Please refer to the <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/blob\/trunk\/plugins\/optimization-detective\/docs\/README.md\" rel=\"nofollow ugc noopener\">full plugin documentation<\/a> for a <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/blob\/trunk\/plugins\/optimization-detective\/docs\/introduction.md\" rel=\"nofollow ugc noopener\">technical introduction<\/a>, <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/blob\/trunk\/plugins\/optimization-detective\/docs\/hooks.md\" rel=\"nofollow ugc noopener\">filter\/action hooks<\/a>, and <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/blob\/trunk\/plugins\/optimization-detective\/docs\/extensions.md\" rel=\"nofollow ugc noopener\">extensions<\/a> that show use cases and examples.<\/p>\n<\/div>\n<div id=\"tab-installation\" class=\"plugin-installation section\">\n<h2 id=\"installation-header\">Installation<\/h2>\n<h4>Installation from the directory within WordPress<\/h4>\n<ol>\n<li>Visit <strong>Plugins &gt; Add New<\/strong> in the WordPress Admin.<\/li>\n<li>Search for <strong>Optimization Detective<\/strong>.<\/li>\n<li>Install and activate the <strong>Optimization Detective<\/strong> plugin.<\/li>\n<\/ol>\n<h4>Manual installation<\/h4>\n<ol>\n<li>Download the plugin <a target=\"_blank\" href=\"https:\/\/downloads.wordpress.org\/plugin\/optimization-detective.zip\" rel=\"nofollow ugc noopener\">ZIP from WordPress.org<\/a> or, after following the <a target=\"_blank\" href=\"https:\/\/make.wordpress.org\/performance\/handbook\/performance-lab\/\" rel=\"nofollow ugc noopener\">Getting Started instructions<\/a>, create a ZIP build from a clone of the <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\" rel=\"nofollow ugc noopener\">GitHub repo<\/a> via <code>npm run build:plugin:optimization-detective --env zip=true<\/code>.<\/li>\n<li>Visit <strong>Plugins &gt; Add New Plugin<\/strong> in the WordPress Admin.<\/li>\n<li>Click <strong>Upload Plugin<\/strong><\/li>\n<li>Select the <code>optimization-detective.zip<\/code> file on your system from step 1 and click <strong>Install Now<\/strong>.<\/li>\n<li>Click the <strong>Active Plugin<\/strong> button.<\/li>\n<\/ol>\n<\/div>\n<div id=\"faq\" class=\"plugin-faq section\">\n<h2 id=\"faq-header\">FAQ<\/h2>\n<dl>\n<dt id=\"where%20can%20i%20submit%20my%20plugin%20feedback%3F\">\n<h3>Where can I submit my plugin feedback?<\/h3>\n<\/dt>\n<dd>\n<p>Feedback is encouraged and much appreciated, especially since this plugin may contain future WordPress core features. If you have suggestions or requests for new features, you can <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/issues\/new\/choose\" rel=\"nofollow ugc noopener\">submit them as an issue in the WordPress Performance Team\u2019s GitHub repository<\/a>. If you need help with troubleshooting or have a question about the plugin, please <a target=\"_blank\" href=\"https:\/\/wordpress.org\/support\/plugin\/optimization-detective\/#new-topic-0\" rel=\"ugc noopener\">create a new topic on our support forum<\/a>.<\/p>\n<\/dd>\n<dt id=\"where%20can%20i%20report%20security%20bugs%3F\">\n<h3>Where can I report security bugs?<\/h3>\n<\/dt>\n<dd>\n<p>The Performance team and WordPress community take security bugs seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions.<\/p>\n<p>To report a security issue, please visit the <a target=\"_blank\" href=\"https:\/\/hackerone.com\/wordpress\" rel=\"nofollow ugc noopener\">WordPress HackerOne<\/a> program.<\/p>\n<\/dd>\n<dt id=\"how%20can%20i%20contribute%20to%20the%20plugin%3F\">\n<h3>How can I contribute to the plugin?<\/h3>\n<\/dt>\n<dd>\n<p>Contributions are always welcome! Learn more about how to get involved in the <a target=\"_blank\" href=\"https:\/\/make.wordpress.org\/performance\/handbook\/get-involved\/\" rel=\"nofollow ugc noopener\">Core Performance Team Handbook<\/a>.<\/p>\n<p>The <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/tree\/trunk\/plugins\/optimization-detective\" rel=\"nofollow ugc noopener\">plugin source code<\/a> is located in the <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\" rel=\"nofollow ugc noopener\">WordPress\/performance<\/a> repo on GitHub.<\/p>\n<\/dd>\n<\/dl>\n<\/div>\n<div id=\"tab-reviews\" class=\"plugin-reviews section\">\n<h2 id=\"reviews-header\">Reviews<\/h2>\n<div class=\"notice notice-warning notice-alt\">\n<p>There are no reviews for this plugin.<\/p>\n<\/div>\n<\/div>\n<div id=\"tab-developers\" class=\"plugin-developers section\">\n<h2 id=\"developers-header\">Contributors &amp; Developers<\/h2>\n<div class=\"plugin-contributors\">\n<p>\u201cOptimization Detective\u201d is open source software. The following people have contributed to this plugin.<\/p>\n<p><span class=\"screen-reader-text\">Contributors<\/span><\/p>\n<ul id=\"contributors-list\" class=\"contributors-list\">\n<li>\n\t\t\t\t<img decoding=\"async\" alt=\"\" src=\"https:\/\/secure.gravatar.com\/avatar\/178f40079143ff7464125e4fbc88e62024a16442920a6a3d6dfa3d7e626be20d?s=32&amp;d=mm&amp;r=g\" srcset=\"https:\/\/secure.gravatar.com\/avatar\/178f40079143ff7464125e4fbc88e62024a16442920a6a3d6dfa3d7e626be20d?s=64&amp;d=mm&amp;r=g 2x\" class=\"avatar avatar-32 photo\" height=\"32\" width=\"32\">\t\t\t\t<a target=\"_blank\" href=\"https:\/\/profiles.wordpress.org\/wordpressdotorg\/\" rel=\"noopener\"><br \/>\n\t\t\t\t\tWordPress.org\t\t\t\t<\/a>\n\t\t\t<\/li>\n<\/ul><\/div>\n<div class=\"plugin-development\">\n<p>\u201cOptimization Detective\u201d has been translated into 3 locales. Thank you to <a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/optimization-detective\/contributors\" rel=\"noopener\">the translators<\/a> for their contributions.<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/optimization-detective\" rel=\"noopener\">Translate \u201cOptimization Detective\u201d into your language.<\/a><\/p>\n<h3>Interested in development?<\/h3>\n<p><a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/browser\/optimization-detective\/\" rel=\"noopener\" class=\"broken_link\">Browse the code<\/a>, check out the <a target=\"_blank\" href=\"https:\/\/plugins.svn.wordpress.org\/optimization-detective\/\" rel=\"noopener\">SVN repository<\/a>, or subscribe to the <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/optimization-detective\/\" rel=\"noopener\" class=\"broken_link\">development log<\/a> by <a target=\"_blank\" href=\"https:\/\/plugins.trac.wordpress.org\/log\/optimization-detective\/?limit=100&amp;mode=stop_on_copy&amp;format=rss\" rel=\"noopener\" class=\"broken_link\">RSS<\/a>.<\/p>\n<\/div>\n<\/div>\n<div id=\"tab-changelog\" class=\"plugin-changelog section\">\n<h2 id=\"changelog-header\">Changelog<\/h2>\n<h4>1.0.0-beta2<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Account for 64 KiB limit for sending beacon data. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1851\" rel=\"nofollow ugc noopener\">1851<\/a>)<\/li>\n<li>Add post ID for the <code>od_url_metrics<\/code> post to the tag visitor context. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1847\" rel=\"nofollow ugc noopener\">1847<\/a>)<\/li>\n<li>Change minimum viewport width to be exclusive whereas the maximum width remains inclusive. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1839\" rel=\"nofollow ugc noopener\">1839<\/a>)<\/li>\n<li>Disable URL Metric storage locking by default for administrators. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1835\" rel=\"nofollow ugc noopener\">1835<\/a>)<\/li>\n<li>Include active plugins in ETag data and increase default freshness TTL from 1 day to 1 week. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1854\" rel=\"nofollow ugc noopener\">1854<\/a>)<\/li>\n<li>Make ETag a required property of the URL Metric. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1824\" rel=\"nofollow ugc noopener\">1824<\/a>)<\/li>\n<li>Use CSS range syntax in media queries. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1833\" rel=\"nofollow ugc noopener\">1833<\/a>)<\/li>\n<li>Use <code>IFRAME<\/code> to display HTML responses for REST API storage request failures in Site Health test. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1849\" rel=\"nofollow ugc noopener\">1849<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Prevent URL in <code>Link<\/code> header from including invalid characters. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1802\" rel=\"nofollow ugc noopener\">1802<\/a>)<\/li>\n<li>Prevent optimizing post previews by default. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1848\" rel=\"nofollow ugc noopener\">1848<\/a>)<\/li>\n<\/ul>\n<p><strong>Documentation<\/strong><\/p>\n<ul>\n<li>Improve Optimization Detective documentation. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1782\" rel=\"nofollow ugc noopener\">1782<\/a>)<\/li>\n<\/ul>\n<h4>1.0.0-beta1<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Add site health check to detect blocked REST API and short-circuit optimization when unavailable. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1762\" rel=\"nofollow ugc noopener\">1762<\/a>)<\/li>\n<li>Allow extensions to opt in to using the web-vitals attribution build via the <code>od_use_web_vitals_attribution_build<\/code> filter. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1759\" rel=\"nofollow ugc noopener\">1759<\/a>)<\/li>\n<li>Disambiguate XPaths for children of <code>BODY<\/code> with <code>id<\/code>, <code>class<\/code>, or <code>role<\/code> attributes. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1797\" rel=\"nofollow ugc noopener\">1797<\/a>)<\/li>\n<li>Eliminate varying URL Metrics by logged-in state and discontinue disabling optimization by default for admins. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1788\" rel=\"nofollow ugc noopener\">1788<\/a>)<\/li>\n<li>Improve test coverage for Optimization Detective. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1817\" rel=\"nofollow ugc noopener\">1817<\/a>)<\/li>\n<li>Introduce <code>OD_Tag_Visitor_Context::track_tag()<\/code> method as alternative for returning <code>true<\/code> in tag visitor callback. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1821\" rel=\"nofollow ugc noopener\">1821<\/a>)<\/li>\n<li>Omit element node index in XPaths up to children of BODY. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1790\" rel=\"nofollow ugc noopener\">1790<\/a>)<\/li>\n<li>Skip visiting tags in the Admin Bar when optimizing a page. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1816\" rel=\"nofollow ugc noopener\">1816<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Ensure optimization is performed in the wp-env local environment and log debug messages to console when disabled. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1822\" rel=\"nofollow ugc noopener\">1822<\/a>)<\/li>\n<li>Skip visiting any tags inside of <code>NOSCRIPT<\/code> elements. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1783\" rel=\"nofollow ugc noopener\">1783<\/a>)<\/li>\n<\/ul>\n<p><strong>Documentation<\/strong><\/p>\n<ul>\n<li>Move Optimization Detective docs into <a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/tree\/trunk\/plugins\/optimization-detective\/docs\" rel=\"nofollow ugc noopener\"><code>README.md<\/code><\/a>. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1763\" rel=\"nofollow ugc noopener\">1763<\/a>)<\/li>\n<\/ul>\n<h4>0.9.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Add <code>fetchpriority=high<\/code> to <code>IMG<\/code> when it is the LCP element on desktop and mobile with other viewport groups empty. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1723\" rel=\"nofollow ugc noopener\">1723<\/a>)<\/li>\n<li>Improve debugging stored URL Metrics in Optimization Detective. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1656\" rel=\"nofollow ugc noopener\">1656<\/a>)<\/li>\n<li>Incorporate page state into ETag computation. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1722\" rel=\"nofollow ugc noopener\">1722<\/a>)<\/li>\n<li>Mark existing URL Metrics as stale when a new tag visitor is registered. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1705\" rel=\"nofollow ugc noopener\">1705<\/a>)<\/li>\n<li>Set development mode to \u2018plugin\u2019 in the dev environment and allow pages to be optimized when admin is logged-in (when in plugin dev mode). (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1700\" rel=\"nofollow ugc noopener\">1700<\/a>)<\/li>\n<li>Add <code>get_xpath_elements_map()<\/code> helper methods to <code>OD_URL_Metric_Group_Collection<\/code> and <code>OD_URL_Metric_Group<\/code>, and add <code>get_all_element_max_intersection_ratios<\/code>\/<code>get_element_max_intersection_ratio<\/code> methods to <code>OD_URL_Metric_Group<\/code>. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1654\" rel=\"nofollow ugc noopener\">1654<\/a>)<\/li>\n<li>Add <code>get_breadcrumbs()<\/code> method to <code>OD_HTML_Tag_Processor<\/code>. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1707\" rel=\"nofollow ugc noopener\">1707<\/a>)<\/li>\n<li>Add <code>get_sample_size()<\/code> and <code>get_freshness_ttl()<\/code> methods to <code>OD_URL_Metric_Group<\/code>. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1697\" rel=\"nofollow ugc noopener\">1697<\/a>)<\/li>\n<li>Expose <code>onTTFB<\/code>, <code>onFCP<\/code>, <code>onLCP<\/code>, <code>onINP<\/code>, and <code>onCLS<\/code> from web-vitals.js to extension JS modules via args their <code>initialize<\/code> functions. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1697\" rel=\"nofollow ugc noopener\">1697<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Prevent submitting URL Metric if viewport size changed. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1712\" rel=\"nofollow ugc noopener\">1712<\/a>)<\/li>\n<li>Fix construction of XPath expressions for implicitly closed paragraphs. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1707\" rel=\"nofollow ugc noopener\">1707<\/a>)<\/li>\n<\/ul>\n<h4>0.8.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Serve unminified scripts when <code>SCRIPT_DEBUG<\/code> is enabled. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1643\" rel=\"nofollow ugc noopener\">1643<\/a>)<\/li>\n<li>Bump web-vitals from 4.2.3 to 4.2.4. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1628\" rel=\"nofollow ugc noopener\">1628<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Eliminate the detection time window which prevented URL Metrics from being gathered when page caching is present. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1640\" rel=\"nofollow ugc noopener\">1640<\/a>)<\/li>\n<li>Revise the use of nonces in requests to store a URL Metric and block cross-origin requests. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1637\" rel=\"nofollow ugc noopener\">1637<\/a>)<\/li>\n<li>Send post ID of queried object or first post in loop in URL Metric storage request to schedule page cache validation. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1641\" rel=\"nofollow ugc noopener\">1641<\/a>)<\/li>\n<li>Fix phpstan errors. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1627\" rel=\"nofollow ugc noopener\">1627<\/a>)<\/li>\n<\/ul>\n<h4>0.7.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Send gathered URL Metric data when the page is hidden\/unloaded as opposed to once the page has loaded; this enables the ability to track layout shifts and INP scores over the life of the page. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1373\" rel=\"nofollow ugc noopener\">1373<\/a>)<\/li>\n<li>Introduce client-side extensions in the form of script modules which are loaded when the detection logic runs. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1373\" rel=\"nofollow ugc noopener\">1373<\/a>)<\/li>\n<li>Add an <code>od_init<\/code> action for extensions to load their code. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1373\" rel=\"nofollow ugc noopener\">1373<\/a>)<\/li>\n<li>Introduce <code>OD_Element<\/code> class and improve PHP API. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1585\" rel=\"nofollow ugc noopener\">1585<\/a>)<\/li>\n<li>Add group collection helper methods to get the first\/last groups. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1602\" rel=\"nofollow ugc noopener\">1602<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Fix Optimization Detective compatibility with WooCommerce when Coming Soon page is served. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1565\" rel=\"nofollow ugc noopener\">1565<\/a>)<\/li>\n<li>Fix storage of URL Metric when plain non-pretty permalinks are enabled. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1574\" rel=\"nofollow ugc noopener\">1574<\/a>)<\/li>\n<\/ul>\n<h4>0.6.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Allow URL Metric schema to be extended. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1492\" rel=\"nofollow ugc noopener\">1492<\/a>)<\/li>\n<li>Clarify docs around a tag visitor\u2019s boolean return value. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1479\" rel=\"nofollow ugc noopener\">1479<\/a>)<\/li>\n<li>Include UUID with each URL Metric. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1489\" rel=\"nofollow ugc noopener\">1489<\/a>)<\/li>\n<li>Introduce get_cursor_move_count() to use instead of get_seek_count() and get_next_token_count(). (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1478\" rel=\"nofollow ugc noopener\">1478<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Add missing global documentation for <code>delete_all_posts()<\/code>. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1522\" rel=\"nofollow ugc noopener\">1522<\/a>)<\/li>\n<li>Introduce viewport aspect ratio validation for URL Metrics. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1494\" rel=\"nofollow ugc noopener\">1494<\/a>)<\/li>\n<\/ul>\n<h4>0.5.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Bump web-vitals from 4.2.1 to 4.2.2. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1386\" rel=\"nofollow ugc noopener\">1386<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Disable Optimization Detective by default on the embed template. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1472\" rel=\"nofollow ugc noopener\">1472<\/a>)<\/li>\n<li>Ensure only HTML documents are processed by Optimization Detective. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1442\" rel=\"nofollow ugc noopener\">1442<\/a>)<\/li>\n<li>Ensure the entire template is passed to the output buffer callback for Optimization Detective to process. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1317\" rel=\"nofollow ugc noopener\">1317<\/a>)<\/li>\n<li>Implement full support for intersectionRect\/boundingClientRect, fix viewportRect typing, and harden JSON schema. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1411\" rel=\"nofollow ugc noopener\">1411<\/a>)<\/li>\n<\/ul>\n<h4>0.4.1<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Upgrade web-vitals.js from <a target=\"_blank\" href=\"https:\/\/github.com\/GoogleChrome\/web-vitals\/blob\/main\/CHANGELOG.md#v350-2023-09-28\" rel=\"nofollow ugc noopener\">v3.5.0<\/a> to <a target=\"_blank\" href=\"https:\/\/github.com\/GoogleChrome\/web-vitals\/blob\/main\/CHANGELOG.md#v422-2024-07-17\" rel=\"nofollow ugc noopener\">v4.2.1<\/a>.<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Fix logic for seeking during optimization loop to prevent emitting seek() notices. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1376\" rel=\"nofollow ugc noopener\">1376<\/a>)<\/li>\n<\/ul>\n<h4>0.4.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Avoid passing positional parameters in Optimization Detective. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1338\" rel=\"nofollow ugc noopener\">1338<\/a>)<\/li>\n<li>Send preload links via HTTP Link headers in addition to LINK tags. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1323\" rel=\"nofollow ugc noopener\">1323<\/a>)<\/li>\n<\/ul>\n<h4>0.3.1<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Log URL Metrics group collection to console when debugging is enabled (<code>WP_DEBUG<\/code> is true). (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1295\" rel=\"nofollow ugc noopener\">1295<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Include non-intersecting elements in URL Metrics to fix lazy-load optimization. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1293\" rel=\"nofollow ugc noopener\">1293<\/a>)<\/li>\n<\/ul>\n<h4>0.3.0<\/h4>\n<ul>\n<li>The image optimization features have been split out into a new dependent plugin called <a target=\"_blank\" href=\"https:\/\/wordpress.org\/plugins\/image-prioritizer\/\" rel=\"ugc noopener\">Image Prioritizer<\/a>, which also now optimizes image lazy-loading. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/issues\/1088\" rel=\"nofollow ugc noopener\">1088<\/a>)<\/li>\n<\/ul>\n<h4>0.2.0<\/h4>\n<p><strong>Enhancements<\/strong><\/p>\n<ul>\n<li>Add optimization_detective_disabled query var to disable behavior. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1193\" rel=\"nofollow ugc noopener\">1193<\/a>)<\/li>\n<li>Facilitate embedding Optimization Detective in other plugins\/themes. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1185\" rel=\"nofollow ugc noopener\">1185<\/a>)<\/li>\n<li>Use PHP 7.2 features in Optimization Detective. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1162\" rel=\"nofollow ugc noopener\">1162<\/a>)<\/li>\n<li>Improve overall code quality with stricter static analysis checks. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/issues\/775\" rel=\"nofollow ugc noopener\">775<\/a>)<\/li>\n<li>Bump minimum PHP requirement to 7.2. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1130\" rel=\"nofollow ugc noopener\">1130<\/a>)<\/li>\n<\/ul>\n<p><strong>Bug Fixes<\/strong><\/p>\n<ul>\n<li>Avoid _doing_it_wrong() for Server-Timing in Optimization Detective when output buffering is not enabled. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1194\" rel=\"nofollow ugc noopener\">1194<\/a>)<\/li>\n<li>Ensure only HTML responses are optimized. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1189\" rel=\"nofollow ugc noopener\">1189<\/a>)<\/li>\n<li>Fix XPath indices to be 1-based instead of 0-based. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1191\" rel=\"nofollow ugc noopener\">1191<\/a>)<\/li>\n<\/ul>\n<h4>0.1.1<\/h4>\n<ul>\n<li>Use plugin slug for generator tag. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1103\" rel=\"nofollow ugc noopener\">1103<\/a>)<\/li>\n<li>Prevent detection script injection from breaking import maps in classic themes. (<a target=\"_blank\" href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1084\" rel=\"nofollow ugc noopener\">1084<\/a>)<\/li>\n<\/ul>\n<h4>0.1.0<\/h4>\n<ul>\n<li>Initial release.<\/li>\n<\/ul>\n<\/div><\/div>\n<p><!-- .entry-content --><\/p>\n<p>\t<!-- .entry-meta --><br \/>\n<\/article>\n<p><br \/>\n<br \/><a href=\"https:\/\/wordpress.org\/plugins\/optimization-detective\/\" target=\"_blank\" rel=\"noopener\">Source link <\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Optimization Detective By performanceteam Download Details Reviews Installation Development Support Description This plugin captures real user metrics about what elements are displayed on the page across a variety of device form factors (e.g. desktop, tablet, and phone) in order to apply loading optimizations which are not possible with WordPress\u2019s current server-side heuristics. This plugin is [&hellip;]<\/p>","protected":false},"author":6,"featured_media":3299,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"give_campaign_id":0,"footnotes":""},"categories":[1933,39,40],"tags":[2247,1976],"class_list":["post-3298","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-community-plugin","category-lite-version","category-wp-plugin-solution","tag-detective","tag-optimization"],"acf":[],"fifu_image_url":"https:\/\/ps.w.org\/optimization-detective\/assets\/banner-772x250.png?rev=3098164","_links":{"self":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/3298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/comments?post=3298"}],"version-history":[{"count":0,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/posts\/3298\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media\/3299"}],"wp:attachment":[{"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/media?parent=3298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/categories?post=3298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/s-o-s.net\/en_gb\/wp-json\/wp\/v2\/tags?post=3298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}