Blog

  • Eliminating Layout Shifts in the Video Block

    Eliminating Layout Shifts in the Video Block

    Like the rest of the internet, I’ve been awestruck by the quality of Google’s Veo 3 AI video generator (even with audio). As you’ve seen from my posts, the American bison 🦬 is my favorite animal (aside from my cat of course). Also, perhaps I’ve watched too many videos from the Mustache Farmer, but I…

    Read post

  • Improve LCP by Deprioritizing Script Modules from the Interactivity API

    Improve LCP by Deprioritizing  Script Modules from the Interactivity API

    Adding a fetchpriority of low to script modules and moving them from the head to the footer can improve LCP by >9%! I’ve written plugins you can use to implement this now while waiting for them to land in WordPress core. The past week I’ve been doing a deep dive into the performance impact of…

    Read post

  • Adding Caption & Lightbox to the Featured Image Block

    Adding Caption & Lightbox to the Featured Image Block

    Earlier this year I re-built this site using the Twenty Twenty-Five theme, finally adopting a block theme over the veritable Twenty Twenty classic theme I had been using. In this rebuild, one thing that I had trouble with is the featured image. In the Twenty Twenty theme, a caption is rendered under the featured image…

    Read post

  • A Decade as a Core Committer: My WordPress Contribution History

    A Decade as a Core Committer: My WordPress Contribution History

    Next Tuesday is my 10-year anniversary of becoming a WordPress core committer back on May 20, 2015. This post is somewhat of a résumé for my contributions to the WordPress project. I joined Google in 2018 to work full time on WordPress. After 6½ years, my sponsored contributor position there has been eliminated. I’m hoping…

    Read post

  • Eagerly Prerender Key URLs with Speculative Loading in WordPress

    Eagerly Prerender Key URLs with Speculative Loading in WordPress

    Speculative Loading is coming to WordPress 6.8. The Speculation Rules API enables browsers to prefetch or prerender URLs so that pages can load much faster for users. Prefetching can reduce your TTFB to zero, and prerendering can reduce your LCP to zero: instant navigation! As explained in Prerender pages in Chrome for instant page navigations,…

    Read post

  • Boosting Performance with Optimization Detective

    Boosting Performance with Optimization Detective

    At WordCamp Asia 2025 today in Manila, I gave a talk about the future for how performance optimizations can be implemented in WordPress today via the Optimization Detective feature plugin. This project has been the focus of my work for the past 1½ years on the WordPress Core Performance Team. Here’s my talk from the…

    Read post

  • My Portland Picks

    My Portland Picks

    I was surprised and delighted at the decision that WordCamp US would be held in my hometown of Portland, Oregon this year–and next year too! Since so many of my teammates and colleagues converge for this yearly event, I really hope everyone gets a chance to enjoy aspects of the city I love. To that…

    Read post

  • Ergonomically Running WP-CLI in wp-env

    Ergonomically Running WP-CLI in wp-env

    Something that has always annoyed me is how verbose it is to run WP-CLI commands in wp-env projects. For example, to list out all posts: The “npm run wp-env run cli” part I have to copy for each command, and I often forget the right order or miss a component. It gets worse when needing…

    Read post

  • Repairing wp-env’s Testing Database

    Repairing wp-env’s Testing Database

    Sometimes when I interrupt PHP unit tests in a wp-env environment I end up getting the database in a bad state so that the next time I try to run tests I get: I then have to re-remember what I do to fix this every time, so I’m blogging it so I won’t have to…

    Read post

  • Running PHPUnit Automatically During Development

    Running PHPUnit Automatically During Development

    Recently I’ve been working on writing unit tests for a new module for the Performance Lab plugin. I realized my workflow was not particularly refined: I kept making a change to the codebase and then switching over to the terminal to re-run PHPUnit by hitting ↑ and Enter. I figured this should be done automatically…

    Read post