Updating WordPress to use more modern versions of Node.js/npm

August 8, 2023: Added a reference to the Node.js and npm tutorial on learn.wordpress.org. โ€“ @desrosj

As of [56378] in the CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. SVNSVN Subversion, the popular version control system (VCS) by the Apache project, used by WordPress to manage changes to its codebase. repository and a3bef32 in the 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/ repository, the versions of Node.js and npm recommended for WordPress development are now 16.x and 8.x, respectively.

Required action by contributors

In order to continue contributing to WordPress through wordpress-develop or WordPress/Gutenberg, youโ€™ll need to upgrade the version of Node.js installed on your machine to one thatโ€™s greater than or equal to 16.19.1 (the latest is currently (16.20.1). This should also update npm to the correct, expected version appropriately.

Using nvm (Node Version Manager) is the recommended and most common way to change the version of Node.js you are running. Both wordpress-develop and the Gutenberg repositories have an .nvmrc file specifying the desired version. Running nvm install within your checkoutโ€™s directory will automatically install the latest version that falls within the defined constraints.

If you need further guidance on how to install or use Node.js, npm, or nvm, there is a great tutorial explaining in great detail on learn.wordpress.org.

Note: If you have any open pull requests, you will likely need to update your 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". to include these changes to ensure they work and are tested properly.

How does Node.js versioning work?

Before diving in to some of the background for this change, here is a brief overview of how the versioning for Node.js releases works:

  • Excluding the main branch (which is always considered unstable), there are 3 states for versions: current, active (LTS or long term support), and maintenance.
  • Major versions (18.x, 19.x, etc.) are released every April and October.
  • October releases (always odd numbered) have a support life of 8 months: 6 in current state, 2 in maintenance. They enter maintenance state in April when the next major version is published.
  • April releases (always even numbered) are converted to active LTS in October after 6 months as the the current version. They remain in active LTS state for 12 months before moving to maintenance for 18 additional months.

You can read more about this on the projectโ€™s Releases page, or the projectโ€™s README file on GitHub.

Why only Node.js 16?

While itโ€™s true that version 16 is currently in maintenance mode, 18.x is currently not an option due to a systems level constraint. The systems team is working on resolving the blockerblocker A bug which is so severe that it blocks a release., and 16.x is the highest that can currently be used.

What is the blocker?

When a commit is made to develop.svn.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/ (visually represented at core.trac.wordpress.org and mirrored to WordPress/wordpress-develop on GitHub), a private server (known as the build server) checks out the new changeset and executes the build scripts required to create a production ready version of WordPress. The results of this process are then committed to build.svn.wordpress.org (visually represented at build.trac.wordpress.org and mirrored to WordPress/WordPress on GitHub). All WordPress releases are created from this repository.

The version of Node.js specified in the package.json file within wordpress-develop must be available on the build server. If itโ€™s not present, everything breaks. specifics about theย WordPress.orgย infrastructure are kept private and as such the reason behind the blocker will not be disclosed.Until this blocker for installing Node.js >= 18 is resolved, version 16 must be used.

Why not update the Gutenberg repo to version 18 and Core to 16?

This was explored but ultimately ruled out. While it would be nice to use the current active LTS version in the Gutenberg repository, it would make contributing more difficult (contributors would have to also install nvm or know how to change versions on the fly), and potentially introduce some weird edge cases where bugs exist in wordpress-develop and not the Gutenberg 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./repository.

Why is the EOL for Node.js 16 this September?

When originally placed in maintenance state, version 16.x was set to receive the full 18 months of support (until April of 2024). However, a decision has been made by the Node.js team to bring the EOL date forward by 7 months.

Node.js 16 was originally released with OpenSSL 1.1.1, which is scheduled for EOL on September 11, 2023. To ensure there is no risk of exposure to any vulnerabilities discovered in OpenSSL 1.1.1 between September 2023 and the original EOL date for Node.js 16 of April 2024, the new EOL date for Node.js 16 is now also September 11, 2023.

The systems team is aware of this expedited timeline.

Will version 18 be skipped?

As of the publish date for this post, 18.x is the active LTE version and 20.x is current. Ideally, when the system-level blocker is resolved the jump directly to 20.x can be made. However, itโ€™s not always that easy or straightforward (see the fact that the project used 14.x until today).

This will be evaluated when the time comes and itโ€™s possible 18.x is used as an intermediate step since maintenance for that release is scheduled through April 30, 2025. But, it is becoming more common for packages to set minimum version requirements to the current active LTS. So jumping directly to 20.x could be required after October 2023 (when 20.x becomes active LTS version).

What does updating to 16.x unblock?

There are several dependencies that the editor team has been looking at using to support phase 3 of the project (collaborative editing). However, those dependencies do not support Node.js 14.x. This allows further exploration and experimentation to take place.

The update also opens the door for exploring how to utilize new features in npm, such as workspaces. npm is bundled with Node.js, and the version included is pinned. Itโ€™s usually not recommended to update npm independently from Node.js to avoid incompatibilities. So unless Node.js is updated to a version that changes the bundled version of npm, these new features are not reliably available or stable.

Where can I learn more?

Here is a list of locations where discussions related to these changes took place:

This change will likely require some documentation and handbook updates. If you notice any adjustments that need to be made, please do point them out in the appropriate locations so that they can be corrected!

Props @youknowriad, @jorbin, @annezazu, and @chanthaboune for reviewing this post.

Dev Chat agenda, August 9, 2023

The next weekly WordPress developers chat will take place onย Wednesday, August 9, 2023 at 20:00 UTCย in theย coreย channel ofย Make WordPress Slack. All are welcome.

For those new to coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. and getting set up ready for 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 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://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/, there is a New Contributors session in the core 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/ on Wednesday, 9 August 2023 at 20:00 BST. These take place every two weeks. They are a great place to start.

Also a useful read is the FAQ for new contributors to core.

Welcome and housekeeping

Dev Chat summary, August 2, 2023 โ€“ courtesy of @ironprogrammer

Announcements

WordPress 6.3 โ€˜Lionelโ€™ Release is now out!

A big thank you to everyone who has made this possible, and to contributors across the globe who continue to contribute to its usage, extension, translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization., and marketing โ€“ as ever, a real community effort.

Highlighted posts

WordPress 6.3 performance improvements

WordPress 6.3 developer notes

Updating WordPress to use more modern versions of Node.js/npm

Reminder: Share your comments on the ticket ownership discussion by September 1, 2023.

Forthcoming release updates

Next major WordPress release: 6.4

6.4 Development Cycle

Reminder: Discussion on a 6.4 wish list. Deadline for comments August 15, 2023.

Tickets or Components help requests

Please add any items for this part of the agenda to the comments. If you can not attend dev chat live, donโ€™t worry, include a note and the facilitator can highlight a ticketticket Created for both bug reports and feature development on the bug tracker. if needed.

Open floor

If you have any additional items to add to the agenda, please respond in the comments below to help the facilitator highlight them during the meeting.

Contributor Day, WordCamp US

Please share any updates for this and if you are able to help support new contributors to core during the event.

#agenda, #dev-chat

Performance Chat Summary: 8 August 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

Contributors: @joemcgill @spacedmonkey @aristath @swissspidy

  • @joemcgill is working with @mukesh27ย on an exploration of ways we can improve performance of the template loading process, which weโ€™ve seen be responsible for a large portion of the overall server response time. Hoping to have something to share later this week. He also plans to do another (smaller) profiling analysis of WP 6.3 after the release today to see if we can identify any optimizations that we can put in place during this release cycle
  • @swissspidy is summarizing the responses to theย i18n peformance analysisย this week together with some suggested next steps (which is probably going to involve a feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins / PL module).
  • Not directly part of the template loading work, but closely related, @flixos90 shared @oandregalโ€˜s PR to cache 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. theme template part data fromย theme.json:ย https://github.com/WordPress/wordpress-develop/pull/4971
    • @swissspidy: Maybe at some point we can just build some caching intoย WP_Theme_JSON_Resolverย ? Just so we donโ€™t end up with X similar public functions that are just cached wrappers around it
  • @joemcgill: Iโ€™m curious if we have thought of ways of evaluating the impact of WP 6.3 using HTTPArchive data, or similar so we can compare real world impact to the benchmarks weโ€™ve been doing?
    • @flixos90: Iโ€™m definitely planning to take a closer look once CrUX performance data is available, i.e. starting in September. Separately, we can also measure our success with some more specific not directly performance-related analyses, e.g. check what % of LCP images is lazy-loaded (bad!) or what % of LCP images receivesย fetchpriority="high"ย (good!).
    • @westonruter is looking into measuring script loading strategy adoption. The upcoming 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/ release will haveย deferย scripts so hopefully weโ€™ll get some data soon
  • @thekt12 is working on changes related toย ย https://core.trac.wordpress.org/ticket/58532ย (block_has_support performance enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature.).

Database Optimization

Link to roadmap projects

Contributors: @aristath @spacedmonkey @olliejones

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

  • @10upsimon: New script loading strategy 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. will of course be released today with 6.3! The docs team has taken ownership of the documentation document that we drafted (with the intent to update all the necessary areas)
  • @westonruter committed use ofย deferย for theย wp-embedย script.
  • @westonruter worked queries to determineย frequency of themes/plugins adding blocking/async/defer scripts in head/footer. Good news that most sites have embracedย $in_footer: around 80% of blocking scripts are in the footer instead of the head. Nevertheless, there are opportunities to engage with the 20% to consider moving blocking head scripts to the footer,ย or rather addย deferย and leave in theย head. He also queried for the specific themes and plugins that seem to be adding those blocking head scripts, so we can engage with 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. authors for possible adoption. (The list is in that same PR.)
  • On the emoji loader front, which accounts for a large improvement to LCP-TTFB in 6.3, @westonruter tried querying for 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 for how often sites have the emoji loader enabled. Found that 61.8% indexed sites have it enabled, with the sites not indexed (the long tail) surely having it more commonly enabled (since it is enabled by default). But we should be seeing the large client-side LCP improvement in about two-thirds of sites in HTTP Archive at least.
  • Also, in relation to inline before/after scripts, @westonruter created query to determineย counts for inline script types. The vast majority (~90%) areย notย afterย inline scripts. So the fact that we didnโ€™t include support for them in 6.3 probably wonโ€™t be hurting us. (In that we shouldnโ€™t commonly be seeing fallbacks to to blocking.)

Images

Link to roadmap projects

Contributors: @flixos90 @thekt12 @adamsilverstein @joemcgill

  • @pereirinha is making good progress onย #58892. Currently going through all the needed updates on testing โ€” removing the deprecated tests and adding updated ones; should have a PR ready toward the EOW.
  • @flixos90 openedย https://github.com/WordPress/wordpress-develop/pull/4973ย yesterday which is a PR to fix images within shortcodes to be handled properly with the other content that it is part of (seeย https://core.trac.wordpress.org/ticket/58853). This morning there are still test failures, so heโ€™ll take another look shortly, but other than that itโ€™s ready for review.
    • @joemcgill: I planned to write a test to demonstrate the use case I mentioned in that ticket aboutย do_shortcode()ย when used directly to generate markup that then gets processed again onย the_contentย 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..
    • @flixos90: I added a test on the PR covering whatย I thinkย you meant, but that may not be what you meant, so it would be great if you could take a look.
  • @joemcgill: Still watching browser implementation of auto-sizes for lazy-loaded images, but no updates over the past few weeks.

Measurement

Link to roadmap projects

Contributors: @adamsilverstein @olliejones @joemcgill @mukesh27 @swissspidy

  • @westonruter addedย added network condition emulationย to the benchmark-web-vitals command. This will allow us to simulate Slow 3G and Fast 3G when benchmarking.
  • @swissspidy recently builtย https://github.com/swissspidy/compare-wp-performance, as shared in the performance analysis post; also working on some other stuff for improving the performance testing environment, hope to have something shareable this week.
  • @joemcgill ran into an issue yesterday with the way weโ€™re loading the web-vitals library in the CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. script that causes it to get blocked by some sites with restrictive content security policies (CSP).ย Reported here. Spent some time trying some workarounds yesterday without success. Will pick this back up, but if anyone has ideas, feel free to jump in.
  • @swissspidy: As a sneak peek for the curious, hereโ€™s another 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 by the repository owner. https://github.com/ action I just started building, also building on top of the wpp-research CLI utils:ย https://github.com/swissspidy/wp-performance-action
  • @joemcgill: There are a number of improvements for the coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. performance workflow that weโ€™ve identified, but not yet picked up work on, likeย https://core.trac.wordpress.org/ticket/58358, which @oandregal recently asked about prioritizing. Iโ€™m unsure if/how that relates to the work @swissspidyย is doing and if we want to wait until that effort is done before addressing some of these things, or if we want to move forward on these in the mean time?
    • Overview covering those tickets
    • @flixos90: I think we need to review those and discuss what to prioritize. While partially a reusable performance testing workflow may address them in a more efficient way, we also have to consider the trade-off between the โ€œperfectโ€ solution and getting to a working solutionย for coreย faster
    • @swissspidy: Yeah so among other things Iโ€™m basically looking into tickets like that and for example #58359 to see how best to address them.

Ecosystem Tools

Link to roadmap projects

Contributors: @mukesh27 @swissspidy @westonruter

  • @mukesh27: We just fixed and merged all the Plugin Checker follow-up issues that we found. To stay up-to-date with our progress, follow us on GitHub:ย https://github.com/10up/plugin-check/ย We highly value your input! If you have any thoughts, ideas, or feedback, please donโ€™t hesitate to share them on the repository.

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27 @10upsimon

  • @10upsimon has been working on a POC, have the UIUI User interface working with the current WPP standalone plugins being rendered with various states. He is currently working on A/B testing two approaches and hopes to have some direction by tomorrow:
    • Retrofitting coreโ€™sย updates.jsย to work in the UI
    • Custom REST controllers with wpp plugin authored JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. to handle the installlation, activation, deactivation etc.

Open Floor

  • N/A

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

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

Editor Chat Agenda: 9 August 2023

Facilitator and notetaker:ย @paaljoachim

This is the agenda for the weeklyย editor chatย scheduled forย Wednesday, August 9 2023, 03:00 PM GMT+1. This meeting is held in theย #core-editorย channel in the Making WordPressย 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/.

WordPress 6.3 will be released on the 8th of August.
Gutenberg 16.4 RC1 is available for testing.
Final version of 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/ 16.4 will be released Wednesday.
A big thank you to @mikachan for handling the Gutenberg 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. release.

Key project updates:

Task Coordination.

Open Floor โ€“ extended edition.

If you are not able toย attendย the meeting, you are encouraged to share anything relevant for the discussion:

  • If you have an update for the main site editing projects, please feel free to share as a comment or come prepared for the meeting itself.
  • If you have anything to share for the Task Coordination section, please leave it as a comment on this post.
  • If you have anything to propose for the agenda or other specific items related to those listed above, please leave a comment below.

#agenda, #core-editor, #core-editor-agenda, #meeting

WordPress 6.3 performance improvements

Update (Aug 8, 2023): Benchmarks in this post were updated with results for the 6.3 stable release.

With WordPress 6.3 now available, this post summarizes the performance improvements that are part of this release. While WordPress 6.2 set the bar high with its notable boost to load time performance of CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., WordPress 6.3 has been able to exceed these results: Based on the performance benchmarks conducted, WordPress 6.3 loads 27% faster 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. themes and 18% faster for classic themes, compared to WordPress 6.2, based on the Largest Contentful Paint (LCP) metric. For WordPress 6.2, those improvements amounted to 18% and 5% respectively, so it is fair to summarize that WordPress 6.3 is a major achievement in terms of performance.

Thank you to @clarkeemily for collaborating on this post!

What makes 6.3 so much faster?

To break down the performance improvements in 6.3, it is crucial to understand the different load time performance metrics and how they relate. The most holistic metric is Largest Contentful Paint (LCP) because it captures overall load time performance. As such, the percentages mentioned in the introduction of this post were specifically the LCP improvements measured.

An important part of LCP is the Time to First Byte (TTFB) metric, which captures server-side load time performance and thus directly affects LCP: Effectively, TTFB is the server-side part that contributes to the LCP result. For client-side load time performance, there is no dedicated standalone metric. However, since client-side performance is effectively everything else, it can be concluded that client-side load time performance can be expressed by the difference between LCP and TTFB, i.e. โ€œLCP-TTFBโ€.

Client-side performance

In WordPress 6.2, the majority of the performance boost came from improvements to server-side performance (TTFB), as highlighted in the aforementioned 6.2 performance improvements post. In WordPress 6.3, that is different: Most of the performance boost stems from client-side performance improvements (LCP-TTFB). In fact, client-side performance in WordPress 6.3 is 40% faster for block themes and 31% faster for classic themes, compared to WordPress 6.2. For reference, in the comparison of WordPress 6.2 with 6.1 LCP-TTFB amounted to only a 1.5% and 2.5% improvement respectively.

The vast majority of the client-side performance improvement comes from optimizing the emoji-loader.js script, by leveraging modern 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 APIs such as Web Workers, OffscreenCanvas, and sessionStorage. Unless your WordPress site has disabled the related emoji functionality, you should notice a performance improvement due to this enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature.. See #58472 and [56074] for additional context on this change.

The other notable portion of the client-side performance improvements stem from adding support for the fetchpriority="high" attribute on images. As such, this improvement is only relevant on content with images above the fold, but given that images are by far the most common media used on web pages, it is very likely that you will notice a performance improvement from this enhancement as well. For a comprehensive overview of how to leverage and modify the new functionality as a developer, please refer to the 6.3 dev note on image performance improvements. For additional context on the change, see #58235 and [56037].

The following list highlights a few additional tickets that can improve client-side performance in certain scenarios, several of them enhancing the heuristics for whether to add the loading="lazy" attribute to images:

Last but not least: A notable developer feature that should be highlighted here is the introduction of script loading strategies, which adds support for loading scripts with defer or async. This is a major milestone for performance in general, however so far only the 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. itself has been introduced, which means there is no actual performance impact from it yet, which is why the change was not mentioned earlier in the post. As WordPress core and the ecosystem starts adopting the API (e.g. defer for block view scripts and async for comment-reply), it is anticipated that in the future we will see notable performance improvements from it as well. Please read the 6.3 dev note on registering scripts with async and defer to learn more on how you can leverage the API as a developer and the advantages over approaches that directly manipulate the script 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.). See #12009 and [56033] for additional context on this change.

Server-side performance

While server-side performance improvements in 6.3 overall did not account for as much of the performance boost, the release still includes several notable enhancements, particularly for block themes, where server response time is 19% faster. Many of the server-side performance enhancements are the result of optimizing low-level logic in WordPress core internals. While this makes the improvements difficult to describe in isolation, it means that they donโ€™t require any adoption or modifications in the WordPress ecosystem in order to become effective.

One of the most notable performance enhancements for block themes was a low-level change which optimizes how WordPress core block styles are registered. This is relevant since core block styles are handled slightly differently from those of custom blocks. Prior to 6.3 however, all blocks were using the same general logic which included quite a bit of flexibility, and thus also a performance cost, which was unnecessary for the core blocks. The change introduced a dedicated function to register core block styles in a more efficient way. See #58528 and [56044] for more context on this change.

Another major win for block theme performance was an improvement to the get_block_templates() function. The logic in that function was optimized to no longer process all block templates but only those that match the current query. See #57756 and [55687] for more context on this change.

The wp_common_block_scripts_and_styles() function is another optimized function that is certainly worth highlighting. This enhancement is only relevant to hybrid themes, specifically classic themes that call add_theme_support( 'wp-block-styles' ), but for those themes it results in a major server-side performance boost. See #58560 and [56064] for more context on this change.

The biggest change that has a notable performance impact for both block themes and classic themes is a performance optimization in the wp_maybe_inline_styles() function which avoids unnecessary calls to relatively costly functions to get the size and contents of stylesheet files. See #58394 and [55888] for more context on this change.

The following list highlights a few additional tickets that can improve server-side performance in certain scenarios:

Database performance

Several enhancements were made in WordPress 6.3 to lazy-load metadata, which can avoid database queries in certain situations. These changes are outlined in the 6.3 dev note post on metadata API improvements. See the individual tickets #57227, #57645, #57901, and #58185 for more context.

Additionally, the get_pages() function now uses WP_Query internally, which not only means elimination of duplicate code, but more importantly it leads to a performance improvement in the function as it now benefits from the same solid caching behavior, something that was missing in the previous custom implementation of the function. For more context, please see the 6.3 dev note on the get_pages() function and the ticketticket Created for both bug reports and feature development on the bug tracker. #12821.

Last but not least, the WP_User_Query class now supports caching query results, becoming the last of the WordPress core query classes to support it. This can avoid database queries when querying user information. For more context, please see the 6.3 dev note on WP_User_Query caching and the ticket #40613.

A note on the benchmarks used

While the metrics shared in this post are based on benchmarks that were conducted with the same methodology used for WordPress 6.2, any benchmarks need to be interpreted with nuance: Other than how the WordPress site used for benchmarking is configured, benchmarks are heavily dependent on the environment that they are run in. To have additional reference points, a few different contributors conducted and shared their benchmarks as well, based on a slightly earlier version of the release, 6.3 RC1. All of the benchmark results are summarized in this spreadsheet.

It can be noted there that some of the other benchmarks did not see improvements as high as noticed in the benchmarks highlighted (which, for context, were run on the authorโ€™s machine), but the main takeaway is that there is a notable performance boost overall. For now it made sense to focus on the performance benchmark with the numbers highlighted in this post in order to be consistent with the numbers from the aforementioned 6.2 performance improvements post, since that was using the same environment for the performance benchmarks as well. For any of the other contributorsโ€™ benchmarks where the relative improvements were not as high, it can be assumed that the 6.2 performance benchmarks on their environments would have shown an equivalently lower performance boost as well.

While this means we cannot get a definite answer to how much faster WordPress 6.3 is, it is safe to say that it is a lot faster than 6.2, and relatively speaking the performance improvement is even higher than it was between 6.2 and 6.1.

Automated benchmarking workflow

Some of the benchmarks referenced were conducted using a new reusable automated benchmarking workflow that @swissspidy recently implemented, using the same approach as the manual benchmarks, but using 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 by the repository owner. https://github.com/ Actions. Those results show that using this workflow leads to more consistent results overall due to using the same environment, and it furthermore reduces the effort needed to conduct performance benchmarks. In the future it may be a good idea to rely on the numbers from that workflow rather than those from an arbitrary environment of a specific contributor. For reference, the automated workflow numbers roughly indicate the following performance improvements in WordPress 6.3 compared to 6.2:

  • LCP is 10.6% faster for block themes and 8.8% faster for classic themes.
  • TTFB is 4.7% faster for block themes and 5.6% faster for classic themes.
  • LCP-TTFB is 13.4% faster for block themes and 9.3% faster for classic themes.

Get involved

If youโ€™re interested in working on improving performance across the project, make sure to join #core-editor, #core-performance, and attend meetings for both.

Props to @adamsilverstein, @annezazu, @joemcgill, @oandregal, @spacedmonkey, @westonruter for review and proofreading.

#6-3, #block-themes, #core-editor-improvement, #core-performance, #performance

WordPress 6.3 Release Candidate 4 (RC4) Now Available for Testing

This unplanned RC4 release does not impact the general WordPress 6.3 release date, which is scheduled for tomorrow, 2023-08-08 19:00 UTC

The following issue has been addressed since RC3:

Thank you to all of the contributors who tested theย BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process./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).ย releases and provided feedback. Testing is a critical part of making each release strong and a great way to contribute to WordPress.

Installing RC4

This version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, it is recommended that you install RC4 on a test server and site.ย 

You can test WordPress 6.3 RC4 in three ways:

Option 1:ย Install and activate 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.ย (select the โ€œBleeding edgebleeding edge The latest revision of the software, generally in development and often unstable. Also known as trunk.โ€ channel and โ€œBeta/RC Onlyโ€ stream).

Option 2:ย Direct download theย release candidate version (zip).

Option 3:ย Run the following command to upgrade viaย 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/:
wp core update --version=6.3-RC4

Plugin and Theme Developers

All plugin and theme developers are encouraged to complete testing of their respective extensions against WordPress 6.3 RC4 and update the โ€œTested up toโ€ย version in their readme file to 6.3 this week. If you find compatibility problems, please post detailed information to theย support forums, so these items can be investigated promptly.

Review theย WordPress 6.3 Field Guide, for more details on this release.

You can find additional information on the entireย 6.3 release cycle.

Check theย Make WordPress Core blogย forย 6.3-related developer notesย for further details on the 6.3 release.

How to Help Test WordPress

Testing for issues is critical for stabilizing a release throughout its development. Testing is also a great way to contribute to WordPress. If you are new to testing, check out thisย detailed guideย that will walk you through how to get started.

If you think you have run into an issue, please report it to theย Alpha/Beta areaย in the support forums. If you are comfortable writing a reproducibleย 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.ย report, you canย file one on WordPress Trac. This is also where you can find a list ofย known bugs.

Can you speak and write in a language other than English?ย Help translate WordPressย into more than 100 languages!


Props to @meher, @rajinsharwar

#6-3 #development #releases

Editor chat summary: August 2nd, 2023

This post summarizes the weekly editor chat meeting (agenda for August 2nd meeting) held on Wednesday, August 2nd 2023, 03:00 PM GMT+1 in Slack. Moderated by @fabiankaegy.

WordPress 6.3 RC3 was released and is available for testing. 6.3 itself will be released on August 8th.ย @priethorย shared a great summary about the release day process. This is the perfect time to do some last-minute testing to help ensure the launch goes as smoothly as possible.

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/ 16.4 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). was released after the meeting ended. Itโ€™s available to test through GitHub.

Gutenberg 16.3 was released last week and the full changelog was posted here in the Make blog.

Key project updates

Open Floor

@isabel_brison shared a proposal they had published a few days earlier to improve the editor side of the release process. Any feedback on that would be very much appreciated.

#core-editor, #core-editor-summary, #gutenber, #meeting-notes, #summary

Performance Chat Agenda: 8 August 2023

Here is the agenda for this weekโ€™s performance team meeting scheduled for Aug 8, 2023 at 15:00 UTC. If you have any topics youโ€™d like to add to this agenda, please add them in the comments below.


This meeting happens in the #core-performance channel. To join the meeting, youโ€™ll need an account on the Make WordPress Slack.

#agenda, #meeting, #performance, #performance-chat

Dev Chat Summary, August 2, 2023

The WordPress Developers Chat meeting took place on August 2, 2023 at 20:00 UTC in the core channel of Make WordPress Slack.

Key Links

Announcements

Highlighted Posts

Hereโ€™s an overview of updates in TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between July 24 and July 31, 2023:

  • 21 commits
  • 40 contributors
  • 64 tickets created
  • 12 tickets reopened
  • 39 tickets closed
  • Synced Patterns: The Evolution of Reusable Blocks: New pattern functionality with WordPress 6.3.
  • Whose ticket is it, anyway?: Follow-up post to last weekโ€™s DevChat discussion about ticketticket Created for both bug reports and feature development on the bug tracker. ownership. Share your thoughts and opinions by September 1, 2023.
  • Proposal: improve the editor tech workflow for major releases: Ideas for improvements to ease the pain points of merging code 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/ into CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., particularly before BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1. This proposal has already generated a lot of favorable consensus to experiment with this approach in the 6.4 cycle.
  • This proposal has been adopted:ย Proposal: Criteria for Removing โ€œBeta Supportโ€ from Each PHP 8+ Version. Involved contributors are currently in the process of:
    • working through the action items list.
    • evaluating the list of incompatibilities for PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 8.0 and 8.1 for WordPress 6.3.

Release Updates

WordPress 6.3

@hellofromtonya asked if Trac #58940 โ€“ site-health.php page Fatal error on version: 6.3-RC2 would require another 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. It was confirmed that the ticket was opened before RC 3, but not fixed in that release. @jeffpaul and @audrasjb agreed that another RC may be warranted, and would check other tickets that remain in the 6.3 milestone (or same query grouped by workflow).

WordPress 6.4

@hellofromtonya indicated that work was underway on 6.4 early tickets.

@chanthaboune noted that wishlist items were being gathered, and that 6.4 release coordinators would be able to triagetriage The act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors. these earlier than is typical, since the 6.4 release cycle is shorter than normal. Of particular note was consideration of items requiring additional dev, design, or a11yAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both โ€œdirect accessโ€ (i.e. unassisted) and โ€œindirect accessโ€ meaning compatibility with a personโ€™s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) attention before committing them to the release.

Maintainers: Component Help Requests

@craigfrancis asked for attention on Trac #54042 โ€“ Extending wpdb::prepare() to support IN() operator, and consideration for 6.4 early designation. He asked for review and thoughts/suggestions on improving the existing patches.

Open Floor

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://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/ Core/Core-* Tables

@desrosj related questions heโ€™d received regarding how Core tables are often spread out at Contributor Day, which can be confusing for both new and experienced Core contributorsCore Contributors Core contributors are those who have worked on a release of WordPress, by creating the functions or finding and patching bugs. These contributions are done through Trac. https://core.trac.wordpress.org who wish to move between tables, especially for collaboration with other focus teams. @webcommsat agreed that it would be beneficial to locate them closely together, to avoid the issue of contributors getting confused and dropping out of the event.

@desrosj also asked if there were any volunteers from the #core-performanceย andย #core-editorย channels who would be willing to lead their respective tables at WCUS. @hellofromtonya suggested posing the question to each teamโ€™s Slack channel. @joemcgill raised his hand for helping at the Core Performance table.

PHP 8.3

@hellofromtonya shared that initial impressions concerning PHP 8.3 are that it would have a low impact to Core. PHP 8.3โ€™s release date is scheduled for November 23, 2023.

Next Meeting

The next meeting will be on August 9, 2023 at 20:00 UTC.

Are you interested in helping draft Dev Chat summaries? Volunteer at the start of the next meeting on the #core Slack channel.

#6-3, #6-4, #dev-chat, #meeting, #summary

Dev Chat agenda, August 2, 2023

The next weekly WordPress developers chat will take place onย Wednesday, August 2, 2023 at 20:00 UTCย in theย coreย channel ofย Make WordPress Slack. All are welcome.

Announcements

WordPress 6.3 Release Candidate 3 is out and available for testing.

WordPress 6.3 Release Day Process

Highlighted posts

A Week in Core, July 31, 2023 โ€“ props to @audrasjb

Between July 24 and July 31, 2023 on TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress., there were:

  • 21 commits
  • 40 contributors
  • 64 tickets created
  • 12 tickets reopened
  • 39 tickets closed

Thanks to everyone who contributed to Trac and tickets in this period.

Synced patterns: the evolution of reusable blocks โ€“ new pattern functionality with WordPress 6.3

Ticket ownership discussion โ€“ feedback wanted by September 1, 2023

Proposal to improve the editor tech workflow for future releases

Forthcoming release updates

Next major WordPress release: 6.3

6.3 is scheduled for release on August 8, 2023.

Stay in theย 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ย with 6.3:

Tickets or Components help requests

Please add any items for this part of the agenda to the comments. If you can not attend dev chat live, donโ€™t worry, include a note and the facilitator can highlight a ticketticket Created for both bug reports and feature development on the bug tracker. if needed. This part of the agenda will focus on items for 6.3 and earlies for 6.4.

Open floor

If you have any additional items to add to the agenda, please respond in the comments below to help the facilitator highlight them during the meeting.

#agenda, #dev-chat