Performance Chat Summary: 5 December 2023

Meeting agenda here and the full chat log is available beginning here on Slack.

Announcements

Priority Projects

Server Response Time

Link to roadmap projects and link to the GitHub project board

Contributors: @joemcgill @swissspidy @thekt12 @mukesh27 @pereirinha

  • @joemcgill #58196 has a PR that could use another set of eyes, but can probably be committed. However, turns out this does not solve a big performance issue, but instead the parent function needs to be looked into instead.
  • @swissspidy For i18ni18n Internationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill. performance I am nagging people for code reviews again at the moment. Otherwise there hasn’t really been any progress.
  • @joemcgill I was reviewing #55595 earlier today, and noticed that widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. registration itself does not really account for much of a performance cost, but rather rendering widgets that can be costly. I think we can likely close that ticketticket Created for both bug reports and feature development on the bug tracker. as `maybelater` but would like a 2nd opinion.
    • Additionally, I noticed that you can already use the `load_default_widgets` filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. to keep WP from loading default widgets, but doing so will cause a fatal if you don’t also unhook `wp_widgets_init`, because that function will try to register the default widgets even if they haven’t been loaded. This seems like a bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority., although not a critical one.
  • @thekt12 Removing call to build_template_part_block_variations on the fontend showed a decent performance improvement -> https://core.trac.wordpress.org/ticket/59969#comment:8 Additionally we did identify two more palaces where the same improvement could be made. Currently I am addressing PR review comments.

Database Optimization

Link to roadmap projects and link to the GitHub project board

Contributors: @mukesh27 @thekt12

JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com/. & CSSCSS Cascading Style Sheets.

Link to roadmap project and link to the GitHub project board

Contributors: @mukesh27 @flixos90 @westonruter

Images

Link to roadmap projects and link to the GitHub project board

Contributors: @flixos90 @adamsilverstein @joemcgill @pereirinha @westonruter

  • @westonruter Pull request for applying the image optimizations is in review and nearing merge (to the feature branchbranch A directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch".)
    • I also have sub-PR opened which makes breadcrumb processing more reliable. (In other words, an XPath for a given image that needs optimization.) Also ready for review.
    • Now that the feature is fully functional I’m going to add test coverage (which I neglected before getting a working prototype in place).
    • I also want to extend the existing logic to also handle CSS background images, whereas currently only img elements are optimized.
    • I’ve also started filing issues under the module’s label for areas where others can contribute.
  • @joemcgill Still working on a proposal for improving the default sizes implementation in WP using available layout data. Also, seeing some progress being made on the browser side implementing the new auto sizes HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. spec, which would be a huge improvement for WP, since we lazy-load many images by default.
  • @swissspidy As for images, I have been looking a bit more into client-side image compression (in GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/) lately to see where this could fit in 2024 plans.

Measurement

Link to roadmap projects and link to the GitHub project board

Contributors: @adamsilverstein @joemcgill @mukesh27 @swissspidy @flixos90

  • No updates this week

Ecosystem Tools

Link to roadmap projects and link to the GitHub repo

Contributors: @mukesh27 @swissspidy

  • @swissspidy No update either from my side, though I just published a small blog post to help spread the word a little bit about PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party Check

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27

Open Floor

Our next chat will be held on Tuesday, December 12, 2023 at 16:00 UTC in the #core-performance channel in Slack.

#core-performance, #performance, #performance-chat, #summary

Hallway Hangout: Performance End of Year Review 2023

Following up on the prior performance related hallway hangout for WordPress 6.3, and hallway hangout for WordPress 6.4, @flixos90 @joemcgill and @clarkeemily co-hosted an end of year hallway hangout to review the WordPress performance enhancements from 2023, and a look ahead to 2024!

The Hallway Hangout took place at 2023-12-07 16:00 and the Zoom link was shared in the #core-performance SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. channel before starting.

At a high level, we went through the following agenda:

  • Quick intros (what each person does/focuses on)
  • Review of WordPress performance improvements throughout 2023
  • Retrospective sharing field data for the cumulative performance impact of the team’s work in 2023
  • Discussion around interpretation of metrics
  • A look ahead to 2024 plans

As a reminder, hallway hangouts are meant to be casual and collaborative so folks came prepared with a kind, curious mind along with any questions or items they wanted to discuss around this important area of the project, especially since the agenda was intentionally loose to allow for it.

Noting this specifically for folks who expressed interest previously or who are involved directly in this work cc @hellofromtonya @aristath @oandregal @annezazu @tweetythierry @desrosj @youknowriad @dmsnell @pbearne @swissspidy @westonruter @adamsilverstein @mukesh27 @joemcgill @johnbillion @10upsimon @thekt12 @linsoftware @pereirinha

Recording

Attendees:

@pbearne @joemcgill @clarkeemily @flixos90 @thekt12 @swissspidy @adamsilverstein @westonruter 

Notes

@flixos90 presented the WordPress Performance 2023 CWV Impact Retrospective slide deck, thank you very much for pulling this together Felix.

Please click the image above to view the slide deck

INP Discussion

@adamsilverstein @flixos90 @pbearne were discussing whether INP mobile scores are due to lower powered mobile devices. The team discussed whether there may be an answer we can find. Mobile passing rate is more of a problem with INP (high chance it’s because of low powered devices). It could be networknetwork (versus site, blog) conditions as well, but lower powered devices likely to be the cause. @pbearne did raise: what would be the fix, low res images? How could we support under-powered devices? @flixos90 commented that for INP specifically it’s about JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com/.. The amount, and how it’s executed, i.e. using a worker thread comes to mind that can improve INP. WordPress doesn’t have support for worker thread. This could be a good opportunity. More about the actual JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. code, reduction of JS code and optimizing JS code. 

It was suggested that the PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party Checker tool could help with? Are there any optimization tools to help here? General consensus is that folks are just not sure. @adamsilverstein mentioned that it’s not just static analysis, these INP issues don’t tend to come up, it’s more in the field when there’s a lot of JS interacting on the page simultaneously. Complicated layouts also contribute to low INP, DOM layouts — but unsure if this is our problem. Maybe likely to be in the front end, themes. Also in the combination of things, animations, app providers, tracking etc, these things add up and compete for resources on a low powered device. @westonruter shared How to diagnose slow INP in the lab: https://web.dev/articles/manually-diagnose-slow-interactions-in-the-lab.

@flixos90 highlighted the Interactivity APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. (very new and not publicly available) this is the first WP coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. own JS API that is just starting to be rolled out. This would allow plugins to use an API allowed by core, htmlHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. directives, could we improve INP through the interactivity API — great potential opportunity for the future. Static analysis in the plugin checker, could look to pointing plugin checker to interactivity API. Prevalence of cookie consent policies, are these contributing to low INP scores? The team feel this is potentially low hanging fruit as 90% of sites need one now.

@joemcgill mentioned the tricky part here is the big services that provide cookie consent provide their own JS code to drop in the page, integrations would be more challenging. @pbearne mentioned a simple basic one that works would be great. Could it be done in a way where you don’t get penalized in the stats. The team agree this is worth looking into. @pbearne asked if this could this be the case of analyzing the top 20 cookie consent plugins and see if they can be made into a canonical plugin and build from the ground up? However the potentially, tricky thing is building something into core will require extensibility similar to how the privacy policy feature was built, driven by legal requirements that are different in all places. If the extensibility is made too flexible, it may cause more INP problems.

Cost Analysis

@pbearne highlighted that there’s no tie back to numbers, costs etc in the presentation from @flixos90 — cost of search engines crawling the save in value, cost saving of hosting companies etc — wondered if there’s a way we can obtain any dollar values against what these performance improvements actually mean. @flixos90 advised that we can try to draw general conclusions but mostly to get real numbers is do individual case studies, maybe there are hosting providers that are happy to share how much LCP improved and what this means for revenue / cost, specific case studies would be the way forward here, it would be difficult to establish this more widely. Maybe there’s a call we can put out to ask any hosting providers if they’re willing to do a case study

TTFB Improvements

@joemcgill went on to discuss the second to last slide, idea that we can get more benefit from focusing on FE LCP improvements, the underlying TTFB improvements — this was Joe’s initial gut instinct, websites that care about performance fix TTFB by not hitting WP application at all, using aggressive page caching etc. However, mindful at the fact that WP 6.3 we had 2 big opportunities that had a big impact on client slide: removal of emoji loading script and image loading improvements (the addition of fetchpriority and the lazy loading improvements). Whilst focusing on FE LCP improvements are easier, do we have opportunities of similar scale that would make sense, or are we just driving server side?

@flixos90 added that the difference is that most of client side improvements that we have done are larger efforts, whereas improving server side cut off milliseconds that add up over time. There may be a point where we have no idea what to improve on the client side, but there are a few things mentioned on image sizes attribute is one of them, optimizing how large images are loaded, continuing to optimize fetchpriority and lazy loading are applied, will drive up the passing rate more. Felix added, the main indicator is when we look at mobile, this is where the big difference is happening, when you look at LCP and TTFB together, but LCP in 6.3 was a lot more (probably came from client side improvements predominantly). Desktop TTFB was more visible than mobile. We always benchmark on a desktop machine, so mobile devices are lower powered. Maybe it’s just because for mobile specifically TTFB improvements have a lower role, and it’s more about the device configuration.

@joemcgill went on to ask whether we’re just looking at the % that are getting good scores, rather than the value of TTFB or change in TTFB metric. Could we have made the same amount of improvement as desktop, but not a big enough value to go over the threshold of the passing rate. Felix mentioned he has looked at these numbers as he has assumed the same thing. When you look at aggregated data, there weren’t major improvements in similar ways. Overall scale is still not visible. 

2024 Suggestions

@pbearne suggested images, do the amounts of images in the media library impact going through file numbers, orphan image sizes left around — should we have a tool to help clean this up? Some images are left behind from changing themes etc, does this bloat the number of images in the file system? If it does, would a simple tool help remove images that are not current. Here, @adamsilverstein suggested that some regenerate thumbnails plugins, URLs still point to old images if they’re removed. Thinks everyone has things in folders, if people have them in one giant directory it would impact. File loading may not be an image, but one place to look at was maybe the attachments in posts database, when doing lookups etc, maybe there are places we can eliminate here — but suspect this is a small improvement. The remaining images are mostly about storage space wasted and incurring costs. For performance on end users, doubt this has a notable impact.

@pbearne also added that the interactivity API would be a great place to investigate. @flixos90 added we should think for next year what can we do to improve interactivity, facilitate WP sites having more responsive interactions. The new metrics means this is more significant. Load time performance, but split this more to cover interactivity. The team discussed any other intentional research what leads to lower INP passing rate, hypotheses have been created but could do with having confidence in knowing where the problems lie. More research is definitely needed.

@flixos90 continued, what do the TTFB numbers mean for us? This year we have been focused on improving TTFB in core, but thinking about mobile representation, are there other ways we should try to move forward TTFB — what about enhancing APIs to provide more guardrails to plugins, there are a lot of other components to this, could argue that small changes don’t cover lower powered — something core can do better to facilitate caching for more people. Can we unlock caching for sites that have hosts that don’t provide this feature etc. @joemcgill added that we had talked about trying to use the SQLite Database as an object cache for sites that don’t have a better option — could we think on this again?

@flixos90 liked this idea, worth exploring — this would be for object caching, could we use it for page caching? Persistent object cache avoids using database requests, not that significant for overall performance. Full page caching would be more beneficial to focus on. Avoiding hitting application altogether could be better. Was looking at full page caching in the CWV dashboard, surprised that the popular caching plugins their TTFB scores are not beating the general WP TTFB numbers, seems counter intuitive. Could we dive into this more? Were these plugins specific to having the full page caching, could not be turned on. @adamsilverstein added that we can get a geographical bias, if the plugin is popular in a region with slower internet, it’s not their problem its the users. @adamsilverstein highlighted that you can breakdown on the settings page of the CWV report by geographical region. Could query this in HTTPHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. Archive to see if there are patterns. Other considerations are all WP plugins that offer full page caching offer this at the application level, not as good as having the layer at the hosting level.

Concluding Statements

@pbearne raised that as a plugin developer, having good tests or validations that I’m doing it right, i.e. plugin checker, improving this and helping you recognise where improvements should be made, is something that can improve overall performance. More work in this field would benefit overall, especially if we can do themes as well.

@joemcgill concluded that the team are thankful to Felix for pulling these numbers together, easy to not be able to see the big picture. But really great to see the impact the performance team has made is great to see!

Props to @joemcgill for proof-reading and to @flixos90 for the excellent presentation.

#core-performance, #hallwayhangout, #performance

Performance Chat Summary: 28 November 2023

Meeting agenda here and the full chat log is available beginning here on Slack.

Announcements

Priority Projects

Server Response Time

Link to roadmap projects and link to the GitHub project board

Contributors: @joemcgill @swissspidy @thekt12 @mukesh27 @pereirinha

  • @joemcgill Main thing happening here at the moment is the ongoing template loading work, captured in this tracking issue
  • @thekt12 Did some profiling for #58196 Performance metrics didn’t show any improvement which is kind of not what was observed in blackfire. https://github.com/WordPress/wordpress-develop/pull/5281#issuecomment-1830164940
    • @joemcgill That’s interesting. I wonder if it’s due to profilers like Blackfire not getting the benefits of the opcode cache? I can try to reproduce locally
    • @thekt12 I am not so sure about that. May be you could try and see what you observer.
    • @joemcgill Will do. I like the removal of the file_exists check and memoizing the path list regardless, so we may want to commit this anyway as a test to see if we could cache this for longer than the current request?
    • @thekt12 Yes we can do that
    • @johnbillion Last time I did some profiling with Blackfire I also saw a very different scale of improvements compared to profiling the code in PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher without it. It has a much greater overhead than I expected.

Database Optimization

Link to roadmap projects and link to the GitHub project board

Contributors: @mukesh27 @thekt12

  • @mukesh27 I worked following PRs:
  • @thekt12 not a performance related thing but still something introduced by caching #59661
    • 2nd scenario in this – https://core.trac.wordpress.org/ticket/59661#comment:7 is something I feel is hard to solve, I just wanted to know do we add dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. in such a scenario.
  • @pbearne Mad Idea (may not be new): Could we store all the files in site in a cache and then only check file exists if not in cache and invalidate when we fail to open a file that cache said it had and was missing
  • @joemcgill file_exists checks have shown to really not be that expensive in production due to the opcode cache, but there are places where we could avoid using them and instead read the file in a try/catch blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. and handle the errors gracefully.
  • @joemcgill For longer-term caching of file content that is expensive to read and parse (e.g., block patterns, etc.) this issue is worth following: #59719

JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com/. & CSSCSS Cascading Style Sheets.

Link to roadmap project and link to the GitHub project board

Contributors: @mukesh27 @westonruter @flixos90

  • @joemcgill Last week I resolved #58632 as maybelater based on @westonruter analysis that showed that >86% of inline scripts are printed before the script they’re attached to, so making inline scripts deferrable do not seem like a priority for now. Better to document for developers how to use this feature in a way that ensures they’re not forcing their scripts to be blocking. I think we can conduct another analysis in the future to see how often async/defer scripts are being downgraded to blocking scripts due to this problem, using the data-wp-strategy attribute we add to mark intended strategy for debugging purposes

Images

Link to roadmap projects and link to the GitHub project board

Contributors: @flixos90 @thekt12 @adamsilverstein @joemcgill @pereirinha @westonruter

  • @westonruter Image Loading Optimization is now working end-to-end! After the pull requests for detection and storage have been merged, I’ve now got drafted a PR for the optimization piece. It’s nearing ready for review, hopefully today.
  • @joemcgill I’ve got a draft of a proposal for updating our default sizes attribute in progress using the layout properties from theme.json an observation is that it would be really nice to find a more declarative way to understand the root padding values that are currently referenced in theme.jsonJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. by their CSS variable names. Not sure if anyone is aware of any other conversations related to that idea that have been started elsewhere.
  • @joemcgill Meanwhile, I noticed several places where GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ is setting images as background CSS, where our optimizations are not being applied. That could be worth an exploration to see how we can optimize.
  • @westonruter I’m intending to target this as well with Image Loading Optimization
    • @joemcgill I can open a tracking issue in our performance repo
  • @westonruter At the moment it’s just targeting img elements to optimize, but it has the pieces to also preload background images.
  • @joemcgill I’m more concerned about the use of very large file sizes, but proper resource hinting would be good to handle as well
  • @swissspidy Speaking of very large file sizes, I’m looking into the client-side image compression work in GB, to see what can be done for 6.5
    • @dmsnell not sure if you know libvips or not, but I noticed they have a WASM build. it’s killer feature, in my opinion, is the ability to stream image operations and avoid loading entire large images in memory at once. Also it’s just a really high quality library

Measurement

Link to roadmap projects and link to the GitHub project board

Contributors: @adamsilverstein @joemcgill @mukesh27 @swissspidy @flixos90

  • @adamsilverstein I’ve been working on getting pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party checker / automated performance testing adoption, making some slow progress
  • @joemcgill There was a strange issue with @mukesh27 PR earlier today. The Performance Test failed due to twentytwentyone not being available. There is a new PR running now that I’m watching to see if it also suffers from the same issue. Something we may need to triagetriage The act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors. today

Ecosystem Tools

Link to roadmap projects and link to the GitHub repo

Contributors: @mukesh27 @swissspidy @westonruter

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27 @10upsimon

  • No updates this week

Open Floor

  • @adamsilverstein I have a couple of items. First, I wanted to share this Issue on WooCommerce – https://github.com/woocommerce/woocommerce/issues/41556 which reports some compatibility issues after they moved a script to the headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. and used defer (originally it was in the footer)
    • … after they adopted the script strategy feature
    • some of the issues may be fixed “upstream” or they may revert the change. in any case, I think it is interesting to see the challenges large plugins like this have making a change/adopting a new approach
  • @adamsilverstein 2nd: I have created a proposal for an oEmbed optimization module for the PL plugin – https://github.com/WordPress/performance/issues/888 appreciate any feedback
  • @pbearne #42441 has moved on, do we need a proposal for this to go into coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.?
    • @swissspidy To me that ticketticket Created for both bug reports and feature development on the bug tracker. is the proposal 
    • @flixos90 Yeah, I don’t think it needs a proposal. Just potentially further discussion on the ticket. I left some thoughts there last week
    • @joemcgill I’d like to get feedback from more folks outside this group. I’m still personally uneasy about making this decision without more input outside this group. I’d raise it in a dev-chat at minimum

Our next chat will be held on Tuesday, December 5, 2023 at 16:00 UTC in the #core-performance channel in Slack.

#core-performance, #performance, #performance-chat, #summary

WordPress 6.4.1 RC1 is now available

WordPress 6.4.1 Release Candidate 1 (RC1) is available for testing! Some ways you can help test this minor release:

  • Use the WordPress Beta Tester pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party
    • As this is a minor RCrelease candidate One of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). release, select the Point Release channel and the Nightlies stream. This is the latest build including the RC and potentially any subsequent commits in trunk.
  • Use WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ to test:
    wp core update https://wordpress.org/wordpress-6.4.1-RC1.zip
  • Directly download the Beta/RC version.

What’s in this release candidate?

6.4.1 RC1 features three (3) fixes.

The following tickets are fixed:

What’s next?

The final release is expected later today Wednesday, November 8, 2023 at 18:00 UTC-6 (tomorrow Nov 9 @ 00:00 UTC). Please note that this timing may change pending issues reported after RC1 is released. Coordination will happen in the WordPress.orgWordPress.org The community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/ SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. using the #core channel.

A special thanks to everyone who helped test, raised issues, and helped to fix tickets. With this release candidate, testing continues, so please help test!

The WordPress 6.4.1 release is led by @jorbin coordinating @hellofromtonya @afragen @clorith @desrosj @pbiron @schlessera @azaozz @tomsommer @nexflaszlo @howdy_mcgee @baxbridge @earnjam @timothyblynjacobs @johnbillion @flixos90 @joedolson @jeffpaul @zunaid321 @courane01 @audrasjb @tacoverdo @ironprogrammer @webcommsat @otto42 @barry and @chanthaboune

#6-4, #6-4-1, #minor-releases, #releases

Four Weeks in Core – October 9, 2023

Welcome back to a new issue of Week in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Let’s take a look at what changed on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between September 4 and October 9, 2023.

Please note that exceptionally and because of personal vacations, this Week in Core issue covers 4 weeks 😊

  • 269 commits
  • 337 contributors
  • 295 tickets created
  • 43 tickets reopened
  • 277 tickets closed

Ticketticket Created for both bug reports and feature development on the bug tracker. numbers are based on the Trac timeline for the period above. The following is a summary of commits, organized by component and/or focus.

Continue reading

#6-4, #core, #week-in-core

Hallway Hangout: Performance Improvements for WordPress 6.4

Following up on the prior performance related hallway hangout for WordPress 6.3, @flixos90 @joemcgill and @clarkeemily will be co-hosting an upcoming hallway hangout to discuss happenings for 6.4.

If you’re interested in joining, the Hallway Hangout will happen on 2023-10-19 15:00. a Zoom link will be shared in the #core-performance SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. channel before starting.

At a high level, we will go through quick intros (what each person does/focuses on) before reviewing WordPress 6.3 performance impact in the field, diving into WordPress 6.4 performance improvements and looking ahead at what can be learned for WordPress 6.5. 

As a reminder, hallway hangouts are meant to be casual and collaborative so come prepared with a kind, curious mind along with any questions or items you want to discuss around this important area of the project, especially since the agenda is intentionally loose to allow for it.

Noting this specifically for folks who have expressed interest previously or who are involved directly in this work cc @hellofromtonya @aristath @oandregal @tweetythierry @desrosj @youknowriad @spacedmonkey @swissspidy @westonruter @adamsilverstein @mukesh27 @joemcgill @johnbillion @10upsimon @thekt12 @linsoftware @pereirinha

Recording

Attendees

@mukesh27 @joemcgill @thekt12 @flixos90 @clarkeemily @adamsilverstein @westonruter @pbearne @swissspidy @10upsimon

Notes

Overview of 6.4 performance improvements

During the call, @joemcgill discussed the benchmark results from WordPress 6.4 where we have identified good improvements for classic themes in particular, and a hypothesis for where those improvements came from was discussed. Currently, it’s difficult to identify where the improvements to classic themes in WordPress 6.4 comes from, but the team are planning to spend additional time investigating this.

@adamsilverstein discussed whether we can start to identify these differences using automated testing, but the variance is difficult to assess. @adamsilverstein suggested having the data in Opentelemetry or Grafana where you can map a trendline with all the data. However, the set up that you use for testing makes a large difference to results.

@flixos90 mentioned that the old approach for benchmarking provided different results compared to the new approach. @joemcgill discussed important considerations for benchmarking, saying that lab results are instructive, however this does not necessarily translate to what we see in the field. @pbearne suggested a query string switch and for people to disable a range of variables, and potentially we could build in A/B testing, this could be a headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.. This could point towards a third method, lab in the field benchmarking!

@flixos90 shared this spreadsheet where benchmarks were compared from previous WordPress versions to WordPress 6.4, as we know so far. This contains only one negative number which is a great result! The results from the GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ actions workflow built by @swissspidy are relatively consistent. @pbearne discussed diminished returns as we do the benchmarks, and discussed how best we set expectations around these improvements.

@flixos90 one thing the performance team needs to work on is consistency in benchmarks. The WordPress 6.3 in the field post was discussed. It was great to see lazy loading and fetchpriority contributed to these improvement and improvements to LCP were discussed. The CWV tech report which looks at overall WordPress, using all sites that are listed in the httpHTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. archive dataset, was also shared and discussed at length. Between July this year, and September this year, the CWV passing rate went from 39% to 41.5% passing rate which is a significant improvement in a short space of time.

Performance dev notesdev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include a description of the change, the decision that led to this change, and a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. for WordPress 6.4

Upcoming Improvements in WordPress 6.5

@joemcgill took us through some upcoming improvements for WordPress 6.5, including:

  • Sever Timing
    • Performant translations pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party (see #59656)
    • Template loading (includes WP_Theme_JSON improvements)
    • BlockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. HooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. follow-up
  • Review Fonts APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.
  • Image optimizations
    • Better sizes calculations (to be completed after 6.5)
    • Block template image optimizations (#59464, #59577)
    • Continue improving LCP heuristics (fetchpriority, lazy-loading)
  • Database optimization
    • Auto-loaded options next steps
  • Measurement

The future of WebP images was discussed at length towards the end of the meeting.

#hallwayhangout, #performance

Two Weeks in Core – September 4, 2023

Welcome back to a new issue of Week in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Let’s take a look at what changed on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between August 21 and September 4, 2023.

  • 75 commits
  • 150 contributors (!)
  • 25 new contributors (!)
  • 129 tickets created
  • 13 tickets reopened
  • 117 tickets closed

Ticketticket Created for both bug reports and feature development on the bug tracker. numbers are based on the Trac timeline for the period above. The following is a summary of commits, organized by component and/or focus.

Code changes

Administration

  • Escape post type output as field attribute – #59190

Build/Test Tools

  • Avoid doing copy:dynamic when running grunt watch when using --dev option – #59196
  • Change the version of Node.js in the Codespaces container – #56658
  • Compare results in performance measurement workflow – #58358, #58359
  • Enable running the tests on PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher 8.3 – #59231
  • Ensure database containers are prepared for commands – #30462, #58867
  • Expand database testing to account for all supported versions and types – #30462
  • Implicitly pass secrets to the called workflow – #30462
  • Merge pre-commit changes missed in [56439]#30462
  • Revert unintentional .env change in [56449]#56594
  • Tests_Formatting_MakeClickable should use data providors – #57660
  • Correct uses of ReflectionProperty::setValue() for static properties – #59231
  • Fix coding standards for Tests_Admin_wpUserSearch#41125
  • Remove webfonts tests – #59165

Bundled Theme

  • Twenty Nineteen: Improve social media icon dimension attributes – #45950
  • Ensure that pull quotes are able to use the correct font size – #57854

Coding Standards

  • Remove unused global variables in various /wp-admin/includes/ files – #59254
  • Use strict comparison in wp-includes/class-wp-hook.php#58831
  • Use strict comparison in wp-includes/class-wp-widget.php#58831
  • Use strict comparison in wp-includes/ms-files.php#58831
  • Use strict comparison in wp-includes/ms-site.php#58831

CustomizerCustomizer Tool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings.

  • use the correct X-Robots-Tag headerHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.#58865

Database

  • Improve the documentation for various methods in the wpdb class – #58833
  • Remove support for the mysql extension – #59118

Docs

  • Add missing param description in WP_Comment class – #58890
  • Clarify post_date_column_time filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. description – #59029
  • Correct default post type in page_template_dropdown() docblockdocblock (phpdoc, xref, inline docs)#58972
  • Docblock improvements in _deprecated_class() function, as per docblocks standards – #58833
  • Fix typo in a translator comment in _deprecated_class()#58833
  • Improve PHPCSPHP Code Sniffer PHP Code Sniffer, a popular tool for analyzing code quality. The WordPress Coding Standards rely on PHPCS. comments general consistency – #58833
  • Use third-person singular verbs in various function descriptions, as per docblocks standards – #58833
  • Wrap inline @see tags in curly braces – #58858

Editor

  • Add relative time strings for the wp-date inline script output – #59219, #47373
  • Don’t use fluid layout value in typography – #58754
  • Ensure main query loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop. is entered for singular content in blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. themes – #58154
  • Optimize wp_get_block_css_selector to remove array_merge calls for better performance – #59178
  • Preserve block style variations when securing theme – #59108
  • Introduce font-face styles generator and printer – #59165

External Libraries

  • Update jQuery to version 3.7.1 – #59227
  • Upgrade PHPMailer to version 6.8.1 – #59238 – #58833

General

  • Fix coding standards for translatable _deprecated_class() message strings – #41125
  • Introduce a _deprecated_class() function – #41125
  • Replace two esc_url_raw() calls in core with sanitize_url()#59247
  • Use regular core button styles for page header actions – #41986

HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

  • Stop processing HTML when encountering unsupported markup – #59167
  • Update WP_Http class to avoid PHP deprecation warnings – #58876

Help/About

  • Match icon and text in Help for bulk edit button – #58785

Login and Registration

  • Improve test coverage for sign on related functions – #36476

Media

  • Add a filter to the get_available_post_mime_types() function to allow overriding its database query – #52759
  • Prevent warning if shortcodeShortcode A shortcode is a placeholder used within a WordPress post, page, or widget to insert a form or function generated by a plugin in a specific location on your site. is used without attributes – #59206
  • Remove unused $is_IE and $is_opera globals in media_upload_form()#59254

Menus

  • Fix proximity of controls to Save and Delete menus – #56594
  • Revert unintentional changes in [56449]#56594

Options, MetaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. APIs

  • Introduce prime_options() to load multiple options with a single database request – #58962
  • Introduce wp_set_option_autoload_values()#58964

Performance

  • Add fallback for $script_uri to prevent firing plugins_url() unnecessarily – #59181

Plugins

  • Correctly display spaces in new plugins search results – #59143

Posts, Post Types

  • Avoid redundant SQL query in get_pages() – #59224
  • Reinstate missing sort_column options in get_pages() – #59226
  • Remove redundant function calls in get_body_class()#43661

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/.

  • Remove misleading comment in WP_REST_Blocks_Controller->get_item_schema – #59193

RevisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.

  • Add missing escaping function for $post_edit_link in wp-admin/revision.php#59141

Rewrite Rules

  • Prevent stampedes when flush_rewrite_rules() is called – #58998

Site Health

  • Show correct debug value for file uploads – #58737
  • fix check name used for REST API permission checks – #59236

Upgrade/Install

  • Add missing escaping function for get_option( 'home' ) in upgrade.php#59199
  • Remove unused globals in core_upgrade_preamble()#59254

Upload

  • Add a MIME type exception for .docx generated by Google Docs – #57898
  • Correct duplicate MIME type for .xlsx files generated by Google Docs – #57898

Users

  • Call add_user_meta() instead of update_user_meta() when adding metadata to a new user – #59212
  • Properly deprecate both constructors in WP_User_Search#41125
  • Remove unused wpdb global in check_password_reset_key()#59185

Widgets

  • Improve performance of has_content method in WP_Widget_Media_Gallery class – #58757

XML-RPC

  • Remove unused wpdb global in wp_xmlrpc_server::mw_newMediaObject()#59185

Props

Thanks to the 150 (!) people who contributed to WordPress Core on Trac last week:

@mukesh27 (14), @costdev (11), @sergeybiryukov (10), @joemcgill (8), @flixos90 (7), @jrf (7), @poena (6), @aristath (5), @afercia (5), @upadalavipul (5), @spacedmonkey (5), @rajinsharwar (4), @desrosj (4), @azaozz (4), @Presskopp (4), @jorbin (3), @oglekler (3), @ramonopoly (3), @swissspidy (3), @david.binda (3), @westonruter (2), @hellofromTonya (2), @oandregal (2), @boonebgorges (2), @tabrisrp (2), @gziolo (2), @daxelrod (2), @johnbillion (2), @hztyfoon (2), @davidbaumwald (2), @sabernhardt (2), @jeffpaul (2), @nidhidhandhukiya (2), @niravsherasiya7707 (1), @michelleblanchette (1), @dhruvishah2203 (1), @matthewfarlymn (1), @elrae (1), @DrewAPicture (1), @rmccue (1), @ohryan (1), @wvega (1), @ahardyjpl (1), @nekojonez (1), @dilipbheda (1), @TobiasBg (1), @Synchro (1), @aslamdoctor (1), @maltfield (1), @szepeviktor (1), @bvreeman22 (1), @johnregan3 (1), @johnjamesjacoby (1), @iammehedi1 (1), @jordanpak (1), @adhun (1), @nithi22 (1), @huzaifaalmesbah (1), @deepakvijayan (1), @zunaid321 (1), @olliejones (1), @laurelfulford (1), @maxinacube (1), @l1nuxjedi (1), @pento (1), @netweb (1), @nacin (1), @crstauf (1), @armondal (1), @tahmidulkarim (1), @crunnells (1), @TimothyBlynJacobs (1), @JordanPak (1), @emailjoey (1), @melchoyce (1), @michaelarestad (1), @danieltj (1), @helen (1), @viralsampat (1), @adamsilverstein (1), @iCaleb (1), @maciejmackowiak (1), @archon810 (1), @rcorrales (1), @varjodesigns (1), @jivygraphics (1), @whyisjake (1), @90lines (1), @sc0ttkclark (1), @jakariaistauk (1), @djcowan (1), @arena (1), @askdesign (1), @bph (1), @bradley2083 (1), @colorfultones (1), @dingo_d (1), @domainsupport (1), @annezazu (1), @dryanpress (1), @elmastudio (1), @francina (1), @garrett-eclipse (1), @gigitux (1), @grantmkin (1), @antonvlasenko (1), @andraganescu (1), @ironprogrammer (1), @Michi91 (1), @youknowriad (1), @jastos (1), @aurooba (1), @dsas (1), @jonoaldersonwp (1), @grapplerulrich (1), @jb510 (1), @annashopina (1), @soean (1), @wildworks (1), @zaguiini (1), @winterstreet (1), @mujuonly (1), @mi5t4n (1), @audrasjb (1), @simison (1), @mikeschroder (1), @manzoorwanijk (1), @adrianduffell (1), @ipajen (1), @dmsnell (1), @skorasaurus (1), @shiloey (1), @jeremyyip (1), @mburridge (1), @jffng (1), @joostdevalk (1), @jorgefilipecosta (1), @juanmaguitar (1), @mamaduka (1), @matveb (1), @mitogh (1), @scruffian (1), @ndiego (1), @ntsekouras (1), @ocean90 (1), @paaljoachim (1), @pagelab (1), @peterwilsoncc (1), @priethor (1), and @mattkeys (1).

Congrats and welcome to our 25 (!) new contributors of the week: @niravsherasiya7707, @michelleblanchette, @matthewfarlymn, @wvega, @ahardyjpl, @aslamdoctor, @maltfield, @bvreeman22, @iammehedi1, @jordanpak, @maxinacube, @l1nuxjedi, @JordanPak, @emailjoey, @varjodesigns, @jivygraphics, @90lines, @djcowan, @askdesign, @Michi91, @jastos, @winterstreet, @mi5t4n, @adrianduffell, @shiloey ♥️

Core committers: @sergeybiryukov (15), @audrasjb (13), @johnbillion (6), @desrosj (5), @swissspidy (4), @drewapicture (4), @jorbin (3), @peterwilsoncc (3), @joedolson (3), @joemcgill (3), @flixos90 (2), @isabel_brison (2), @hellofromtonya (2), @timothyblynjacobs (1), @davidbaumwald (1), @antpb (1), @kadamwhite (1), @spacedmonkey (1), @westonruter (1), @adamsilverstein (1), @bernhard-reiter (1), @costdev (1), and @whyisjake (1).

#6-4, #core, #week-in-core

Performance Chat Summary: 29 August 2023

Meeting agenda here and the full chat log is available beginning here on Slack.

Announcements

  • Welcome to our new members of #core-performance
  • Thanks to everyone who visited the Performance table on Contributor DayContributor Day Contributor Days are standalone days, frequently held before or after WordCamps but they can also happen at any time. They are events where people get together to work on various areas of https://make.wordpress.org/ There are many teams that people can participate in, each with a different focus. https://2017.us.wordcamp.org/contributor-day/ https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/. at WordCampWordCamp WordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what they’ve learned throughout the year and share the joy. Learn more. US last week – here’s a round-up of some activity:
    • @westonruter I was working on removing unload event handlers from wp-adminadmin (and super admin) (#55491) which relate to performance since they prevent bfcache. Got a mostly-complete patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. ready for review. But ironically I found in 6.3 that bfcache was explicitly disabled via Cache-Control: no-store (#21938), so removing unload doesn’t have any effect. Maybe we want to revisit that.
    • @flixos90 I committed https://core.trac.wordpress.org/changeset/56445 at Contributor Day, that’s a big deal in terms of new APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. functions, with prime_options() and get_options() (the latter is probably what most WP devs will immediately understand what it does)
    • @mukesh27 One ticketticket Created for both bug reports and feature development on the bug tracker. that was committed at WCUS Contributor Day Performance optimization of register_block_script_handle() – This will improve improve Server side metric by ~1%
    • @joemcgill #58998 should help avoid DB stampedes when rewrites are flushed. I’m hoping @icaleb will be able to test this patch at VIP and let us know if there are any side effects that we need to be aware of.
    • @joemcgill We also had #52759 committed that adds a filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. to avoid a potentially expensive DB query, but it’s currently reopened to consider a name change for the filter. Feel free to weigh in if you have opinions.
    • @flixos90 During Contributor Day @gziolo and myself worked through this, at the end came up with an idea for a solution, which I implemented yesterday, in https://github.com/WordPress/gutenberg/pull/49904 and https://github.com/WordPress/wordpress-develop/pull/5104 (the two are kind of related but separate problems)
  • This week’s Performance Bug Scrub lead, request for volunteer please
    • @joemcgill happy to run this weeks bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. scrub (thank you!)

Priority Projects

Server Response Time

Link to roadmap projects

Contributors: @joemcgill @spacedmonkey @aristath @swissspidy

  • @joemcgill I spent some time prior to WCUS looking at #57789 and plan to pick that back up later this week as a part of a general focus on improving template loading
  • @flixos90 working on https://github.com/WordPress/wordpress-develop/pull/5069, starting at Contributor Day and iterated yesterday. Will make another iteration today and then it should be ready for another review
  • @swissspidy I had some great discussions at WCUS regarding i18ni18n Internationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill. performance, people are really interested in testing this new feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins.. The great news is that the pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party just got approved, so I’ll push it to WordPress.org later today or so. Then we can spread the word and start looking into adding it to Performance Lab (once we have the standalone modules) etc.

Database Optimization

Link to roadmap projects

Contributors: @aristath @spacedmonkey @olliejones

  • No updates this week

JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com/. & CSSCSS Cascading Style Sheets.

Link to roadmap project

Contributors: @mukesh27 @10upsimon @adamsilverstein @westonruter

  • @westonruter I backported the use of defer for blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. view scripts from GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ to WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. (#59115). I did some more perf analysis and found a 6.5% reduction in TTFB-LCP
    • @flixos90 What scenario was that tested with? TT3 or another theme / configuration? (Details are in the TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. comment)
  • @westonruter I also analyzed moving Twenty Seventeen’s scripts from the footer to the head and adding defer, but I didn’t find there to be any improvement
  • @westonruter On the non-JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. front, I did some more analysis on the impacts of inlining stylesheets instead of loading them externally, especially when a CDN is involved. I found inlining to be more important when a CDN is involved, but when a CDN isn’t involved, then better not to inline. The findings don’t seem to be entirely conclusive, however
    • @flixos90 I think this is an important learning worth sharing with the broader community. It has come up numerous times in the past that folks suggest to inline certain assets based on an assumption that that would be faster. But seems that’s more complicated than that
  • @joemcgill I noticed that #58634 has a PR that could use a review. Otherwise, that one doesn’t yet have an owner
  • @joemcgill Also, https://github.com/WordPress/gutenberg/discussions/53260 is an interesting conversation going on in the Gutenberg repo about using JS modules to better load scripts and styles async. Worth looking into and giving feedback.

Images

Link to roadmap projects

Contributors: @flixos90 @thekt12 @adamsilverstein @joemcgill

  • @pereirinha I do have clarification for #58893, and asked for another round of feedback on #58892. If I didn’t get it back to the right track, I might need a call to clear it up
  • @flixos90 Update from me that is kind of related to images but actually has nothing directly to do with images is that I opened a can of worms at contributor day finding several bugs with how the WordPress main query loopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop. (“the loop”) is being handled incorrectly by block themes in general, which has been causing problems such as https://core.trac.wordpress.org/ticket/58027

Measurement

Link to roadmap projects

Contributors: @adamsilverstein @joemcgill @mukesh27 @swissspidy

  • @swissspidy Just before WCUS I merged r56399 so that we now track TTFB & LCP in WordPress core performance tests
  • @swissspidy Another PR to improve the core performance tests output is currently in review
    • @joemcgill I’m particularly interested in how we can get this into the CI workflow sooner rather than later, since folks on the Gutenberg side are finding it extra helpful. I think it will reduce the amount of manual work we end up doing benchmarks on individual PRs as well
    • @swissspidy Yeah I might remove the PR comment part if that’s a blockerblocker A bug which is so severe that it blocks a release.. Jonathan offered to review it once he’s back from WCUS
    • @flixos90 Agreed, though I am slightly concerned by posting the results in a comment on each PR at this point. Given that the metrics are still rather unstable, I am wary of people over-interpreting them, e.g. arguing that a change is particularly great or problematic just based on numbers which could come from variance. So not a technical problem with the PR at all, but I’d feel more confident about implementing everything but the PR message, so that the data is there, just not as “alarmist”
    • @joemcgill I agree. I would like for there to be a way to contextualize the change related to expected variance so folks don’t get super excited about a small change that could just be noise
    • @flixos90 We could pull the PR message logic out, and then create a separate ticket with PR for “Future Release”
    • @swissspidy Yeah, there’s still some variability with those results, but that’s just GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/. Adding an explanation to the comment makes sense. I like the PR because it is easier to discover than the summary, but it does require setting up a secret token for it to work, which is also not ideal when working with forks. (NB I did experiment with running Playwright browsers within Docker, so in the future that might help reduce variance.)
    • @joemcgill We can also tie that to the trac ticket (I’ll find it and thread it) that is about posting results from workflows – https://core.trac.wordpress.org/ticket/56150

Ecosystem Tools

Link to roadmap projects

Contributors: @mukesh27 @swissspidy @westonruter

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27 @10upsimon

  • @flixos90 I had something to share kind of related to ecosystem tools: At Contributor Day, @chriscct7 shared https://plugintests.com/ with a few of us, which he had discovered at some point, and it’s just a mind blowing tool nobody seems to know about, covering the whole plugin repository in a lot of detail. Not sure what we can do with that at this point, but it’s just something quite interesting to look at and be aware of. It has e.g. PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher compatibility information for every plugin, detailed data on e.g. which options or admin screens a plugin adds, whether there are PHP or JS errors etc.
  • @icaleb There were talks, once upon a time, of integrating that same tech into the .org repo. I think various acquisitions got in the way – but definitely would be interesting to see what might still be possible!

Open Floor

  • Reviews of #59224 and #59226
    • @joemcgill Two issues that seem like they need early eyes on. I see Andrew and Jonny are already reviewing, but would be good for others to have visibility
  • @johnbillion Quick item from me, I’m planning on opening a ticket for implementing a function to bulk add metadata (starting with users), mostly a narrower scope version of #34848. I’ve recently been looking at various performance issues when inserting data into WP, hoping to tackle a few – PR review would be good, I’ll add the performance focus when I open the ticket later today

Our next chat will be held on Tuesday, September 5, 2023 at 15:00 UTC in the #core-performance channel in Slack.

#core-performance, #performance, #performance-chat, #summary

A Week in Core – August 21, 2023

Welcome back to a new issue of Week in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Let’s take a look at what changed on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between August 14 and August 21, 2023.

  • 27 commits
  • 34 contributors
  • 64 tickets created
  • 6 tickets reopened
  • 50 tickets closed

Ticketticket Created for both bug reports and feature development on the bug tracker. numbers are based on the Trac timeline for the period above. The following is a summary of commits, organized by component and/or focus.

Code changes

Administration

  • Add function to standardize adminadmin (and super admin) notices – #57791
  • Apply admin notice functions in multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site#57791
  • Invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. argument passed in additional_classes – #57791

Build/Test Tools

  • Don’t send a SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. notice when a workflow fails once – #58867
  • Measure additional load time metrics in performance tests – #58360
  • Revert Slack messaging changes – #58867
  • Send a failure notice in Slack when a run fails to start – #58867
  • Simplify the required prerequisite jobs for the failed-workflow job – #58867
  • Update PHPUnit Polyfills to version 1.1.0 – #59150
  • Use the correct variable for checking the previous conclusion – #58867

Coding Standards

  • Improve variable names in wp_save_image()#58831
  • Use strict comparison in wp-admin/includes/image-edit.php#58831
  • Use strict comparison in wp-admin/includes/meta-boxes.php#58831

Docs

  • Add missing @ to the return tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) in the wp_get_theme_data_template_parts function – #59003
  • Correct punctuation in some instances of the $crop parameter description – #58833
  • Fix typo in duplicate hook references for views_{$this->screen->id}#59102, #58833
  • Miscellaneous docblockdocblock (phpdoc, xref, inline docs) corrections and improvements – #58833

Editor

  • Ensure defer loading strategy is only applied to a blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience.’s viewScript – #59115
  • Fix error handling of converting classic to block menus – #58823
  • Use defer loading strategy for block view scripts – #59115
  • update npm packages with critical bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fixes for 6.3.1 – #59151

General

  • Revert the last use of str_starts_with() in update-core.php#59145

Media

  • Standardise documentation of the $crop parameter for various media functions and methods – #58833

Posts, Post Types

  • Remove redundant function calls in get_body_class()#43661

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/.

  • Correct the docblocks for various permission related methods – #58833

Site Health

  • Correct the check for disk space available to safely perform updates – #59116

Themes

  • Add wp_get_theme_data_custom_templates function – #59137

Props

Thanks to the 50 people who contributed to WordPress Core on Trac last week:

@sergeybiryukov (3), @costdev (2), @aristath (2), @joedolson (2), @audrasjb (2), @johnbillion (2), @afercia (2), @poena (2), @joemcgill (2), @mukesh27 (2), @westonruter (2), @flixos90 (1), @gziolo (1), @oandregal (1), @rajinsharwar (1), @youknowriad (1), @swissspidy (1), @nithins53 (1), @Presskopp (1), @mathsgrinds (1), @mattkeys (1), @sabernhardt (1), @dasnitesh780 (1), @sakibmd (1), @spacedmonkey (1), @ramonopoly (1), @ayeshrajans (1), @jrf (1), @hellofromTonya (1), @antonvlasenko (1), @get_dave (1), @dlh (1), @oglekler (1), and @NekoJonez (1).

Congrats and welcome to our new contributor of the week: @mathsgrinds ♥️

Core committers: @sergeybiryukov (8), @desrosj (5), @johnbillion (3), @joedolson (3), @oandregal (2), @westonruter (2), @hellofromtonya (1), @isabel_brison (1), @azaozz (1), and @swissspidy (1).

#6-3, #6-4, #core, #week-in-core

Two Weeks in Core – August 14, 2023

Welcome back to a new issue of Week in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. Let’s take a look at what changed on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between July 31 and August 14, 2023.

  • 40 commits
  • 50 contributors
  • 164 tickets created
  • 15 tickets reopened
  • 138 tickets closed

Ticketticket Created for both bug reports and feature development on the bug tracker. numbers are based on the Trac timeline for the period above. The following is a summary of commits, organized by component and/or focus.

Code changes

Build/Test Tools

  • Bump the required versions of Node.js and npm – #56658
  • Correct two @covers annotations to use the recommended pattern – #59069
  • Update 3rd-party GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ Actions – #58867
  • Update all build tool related dependencies – #58863
  • Update the README file to reflect new Node.js/npm versions – #59071, #56658
  • revert downgrade of uuid – #58623
  • Fix leakage in WP_List_Table tests – #58955, #58896

Code Modernization

  • Deprecate dynamic properties in WP_List_Table magic methods – #58896, #56034
  • Deprecate dynamic properties in WP_Text_Diff_Renderer_Table magic methods – #58898, #56034
  • Deprecate dynamic properties in WP_User_Query magic methods – #58897, #56034
  • Use “declare” in WP_List_Table magic methods deprecation message – #58896

Coding Standards

  • Bring more consistency to Last-Modified and ETag checks – #58831
  • Rewrite loose comparison in wp_list_categories()#58831
  • Use instanceof keyword instead of the is_a() function – #58943
  • Use strict comparison in wp-admin/includes/class-wp-importer.php#58831
  • Use strict comparison in wp-includes/class-wp-image-editor.php#58831
  • Use strict comparison in wp-includes/class-wp.php#58831
  • Use strict comparison in wp-includes/cron.php#58831
  • Use strict comparison in wp-includes/kses.php#58831
  • Use strict comparison in wp-includes/revision.php#58831

Docs

  • Correct duplicate hook reference for wp_min_priority_img_pixels#59067
  • Remove @see references for SimplePie classes – #59030

Editor

  • Only exclude auto-generated blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. files from coding standards checks – #50010
  • Simplify usage of block_has_support() function by supporting a string – #58532

Embeds

  • Modernize wp-embed script with removal of obsolete IE10/IE11 code and support for WP 4.4 and below – #58974

Emoji

  • Suppress console errors from sessionStorage usage in sandboxed post embed iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser.#58978, #58472

External Libraries

  • Update Backbone.js to version 1.5.0#58930
  • Update imagesLoaded to version 5.0.0#56731
  • Update the whatwg-fetch polyfill library – #59066

HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.

  • Add support for BUTTON element – #58961
  • Adjust code styling to GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/’s linter’s preferences – #58918
  • Fix missing * for docblockdocblock (phpdoc, xref, inline docs)#58918. – #59010

Media

  • Simplify logic in wp_get_loading_optimization_attributes()#58891

Options, MetaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. APIs

  • Expand $autoload parameter documentation – #58963

Script Loader

  • Use defer loading strategy for wp-embed script and move to head (in block themes) – #58931

Site Health

  • Use PHP_SAPI constant instead of the php_sapi_name() function – #58942

Themes

  • Avoid unnecessary check whether parent template file exists when not using a child themeChild theme A Child Theme is a customized theme based upon a Parent Theme. It’s considered best practice to create a child theme if you want to modify the CSS of your theme. https://developer.wordpress.org/themes/advanced-topics/child-themes/.#58576
  • add wp_get_theme_data_template_parts function – #59003

Upgrade/Install

  • Update $_old_files for 6.3 – #58994

Users

  • Correct the logic for switch_to_blog() in WP_User_Query::generate_cache_key()#59011

Props

Thanks to the 50 people who contributed to WordPress Core on Trac last week:

@sergeybiryukov (13), @aristath (7), @rajinsharwar (7), @afercia (7), @poena (7), @costdev (6), @jrf (5), @antonvlasenko (5), @hellofromTonya (5), @mukesh27 (5), @audrasjb (5), @peterwilsoncc (4), @swissspidy (4), @desrosj (4), @hareesh-pillai (3), @ayeshrajans (3), @dmsnell (3), @flixos90 (3), @westonruter (3), @markjaquith (3), @oglekler (3), @jeffpaul (3), @thekt12 (2), @nihar007 (2), @nazsabuz (1), @arnedb (1), @Hareesh (1), @spacedmonkey (1), @Pillai (1), @JeffPaul (1), @joemcgill (1), @davidbaumwald (1), @crstauf (1), @kevin940726 (1), @khokansardar (1), @Rahe (1), @adamsilverstein (1), @valmedia2023 (1), @dantovbein (1), @hbhalodia (1), @tmatsuur (1), @felixarntz (1), @gziolo (1), @ahmedgeek (1), @dd32 (1), @austinginder (1), @RavanH (1), @lopo (1), @youknowriad (1), and @rmccue (1).

Congrats and welcome to our 5 new contributors of the week: @nazsabuz, @arnedb, @valmedia2023, @dantovbein, @ahmedgeek ♥️

Core committers: @sergeybiryukov (14), @desrosj (7), @hellofromtonya (5), @flixos90 (4), @westonruter (3), @bernhard-reiter (2), @johnbillion (1), @oandregal (1), @jorbin (1), @davidbaumwald (1), and @isabel_brison (1).

#6-3, #6-4, #core, #week-in-core