Dev Chat Summary, April 26, 2023

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

Key Links

Highlighted Posts

Hereโ€™s the awesome activity seen in TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between April 17 and April 24, 2023:

  • 27 commits
  • 36 contributors
  • 51 tickets created
  • 6 tickets reopened
  • 53 tickets closed
  • and 4 new contributors ๐ŸŽ‰
  • The benefits of prioritizing and measuring performance in WordPress 6.2: Read about the collaborative planning and work that contributed to the performance gains brought with WordPress 6.2.
  • WP Feature Notifications: 2023 Status Update: This update explains recent progress toward a CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.-targeted modern WordPress user notification system, its interplay with 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/ Phase 3, and how you can get involved.
  • WP Briefing: Episode 54: A Bill of Rights for the Open Web: Listen as Josepha explores the four freedoms of open sourceOpen Source Open Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL., which have been referred to as a โ€œBill of Rightsโ€ for the open web.

Release Updates

6.3 Planning

@ironprogrammer shared a reminder that the WordPress 6.3 Planning Proposal & Call for Volunteers is open for release squad members and mentors through this Sunday, April 30.

6.2.1 Minor ReleaseMinor Release A set of releases or versions having the same minor version number may be collectively referred to as .x , for example version 5.2.x to refer to versions 5.2, 5.2.1, 5.2.3, and all other versions in the 5.2 (five dot two) branch of that software. Minor Releases often make improvements to existing features and functionality.

@audrasjb provided a WP 6.2 triagetriage The act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors. update:

@ironprogrammer asked for confirmation that a small squad is still needed to run the 6.2.1 release, which @audrasjb confirmed. JB then added that an active Gutenberg contributor should ideally help shepherd the related issues/PRs/tasks; and that someone would be needed to help build packages, suggesting that @sergeybiryukov might help with Mission Control.

@ironprogrammer suggested sharing the needs for Gutenberg contributor involvement in the #core-editor channel, which @audrasjb confirmed he would follow up.

Open Floor

During open floor, @presskopp raised visibility on the following Trac tickets:

#33073: Some strings need โ€œno HTML entitiesโ€ translator comments โ€” @ironprogrammer proposed that the ticketticket Created for both bug reports and feature development on the bug tracker. be milestoned for 6.3, as it had suggestions on how it might be addressed. @sergeybiryukov assigned the milestone to move the ticket forward.

#57999: Donโ€™t show error message when there is nothing to update โ€” @audrasjb suggested moving the ticket to 6.3; @pbiron agreed by setting the milestone and self-assigning the ticket. @ironprogrammer suggested that example reproduction flows be added to the ticket in order to help during testing.

#53682: tags (keywords) with umlauts donโ€™t get saved in German locale โ€” @audrasjb noted that this ticket still needed a 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. to move it forward.

#54836: Huge error logs filled with โ€œWordPress database error Illegal mix of collationsโ€ errors caused by spammers โ€” @ironprogrammer agreed with @audrasjbโ€˜s in-ticket assessment, and that a Database component maintainer should review the ticket, so pinged @craigfrancis. @pbiron asked if the issue was due to different collations in the DB, or if the collation differed from the spam text encoding, and Brian asked for reproduction steps to better understand what triggers the errors.

#50081: orderby datetime field โ€” @audrasjb identified this as a Docs (DevHub) issue, and updated the ticket. @leogermani and @sergeybiryukov responded and provided context for when the code example was last updated. JB updated the sample code in DevHub and closed the ticket. ๐ŸŽ‰

#39645: If user โ€œadminโ€ doesnโ€™t exist (renamed admin account) users can create a user with username admin โ€” this last ticket mention occurred after Dev Chat wrapped up, and there was no further discussion on it.

Next Meeting

The next meeting will be on May 3, 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.

Props @costdev for peer review of this summary, and to everyone who participated in the Dev Chat.

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

Editor chat summary: 26 April, 2023

This post summarizes the weekly editor chat meeting (agenda for 26th of April meeting) held on Wednesday, April 26 2023, 03:00 PM GMT+1 inย Slack. Moderated byย @paaljoachim.

Gutenberg plugin 15.7 RC1 is ready to test.

Key project updates:

No updates of Key Projects during the coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. editor meeting.

Task Coordination

No updates at this time.

Open Floor

@bph

In case you missed it.ย 
@greenshady publisehdย Per-block CSS with theme.json and
@welcher published How webpack and WordPress packages interact on the WordPress Developer Blogblog (versus network, site).

There are a few more discussions at 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 by the repository owner. https://github.com/ repo on the topic ideas on Developer Blog Content, just in case someone would like to start writing, or wants to chime in.

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

Editor Chat Agenda: 26 April 2023

Facilitator and notetaker:ย @paaljoachim

This is the agenda for the weeklyย editor chatย scheduled forย Wednesday, April 26 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/.

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/ 15.7 RC1 is released today and available for testing.
A big thank you to @bph for handling the 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

Performance Chat Summary: 25 April 2023

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

Announcements

  • Updated the cadence of 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. scrubs to be every 2 weeks โ€“ next one scheduled for April 26, 2023 at 15:00 UTC.
  • @flixos90 Also briefly sharing that I just published a performance retrospective post on WP 6.2 that I had been working on over the past few weeks:ย https://make.wordpress.org/core/2023/04/25/the-benefits-of-prioritizing-and-measuring-performance-in-wordpress-6-2/ It highlights some of the key aspects which changed in 6.2 in how we dealt with performance and also summarizes high level numbers. It can be seen as somewhat complementingย https://make.wordpress.org/core/2023/04/05/wordpress-6-2-performance-improvements-for-all-themes/, at a higher level however without looking as much at specific improvements.
  • Discussion regarding theย decoupling of the SQLite 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.ย from the performance lab work. In reference toย this conversation that came up in a previous performance chat. Would love to have an open discussion about peoples preferences here and whether we do decouple this?
    • @olliejones I favor that approach. It will usually be deployedDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. independently of the stuff in PL.
    • @10upsimon I tend to lean more toward an agreement withย @rmccue in that SQLite is not necessarily performance improvements focused (or at least that is not the primary goal), and probably belongs outside of the realm of the performance lab work.
    • @spacedmonkey To be clear, I think that performance team should continue to support SQlite getting into coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., to much sure it done in a performant way. But SQlite is not a performance benefit on the face of it, so it is confusing why we part of performance lab plugin.
    • @rmccue Yeah, that was basically my thought; I think itโ€™s beneficial all-round to separate it out (but with performance still consulting as @spacedmonkey says)
    • @olliejones yes, having SQLite headed for core is good. I believe the issue is about monorepo and multifunction plugins on the one hand and a separate repo and plugin on the other.
    • @aristath I agree with what was mentioned above 100%. SQLiteย canย be related to performance, but is not in itself a โ€œperformanceโ€ module/plugin. It should be developed in collaboration with the performance team since it can have a big impact, but Iโ€™d vote to decouple it from the performance-lab plugin
    • @olliejones Maybe in a parallel universe or another year, there can be a separate database team. But for now the perf. team has the talent.
    • @spacedmonkey If you want to setup a meeting for a database team, that could work. Many component meetings have less than 5 people.
    • @flixos90 To clarify, this conversation is slightly different and mostly unrelated to the โ€œunbundling Performance Lab pluginโ€ effort. While we are publishing other PL modules as standalone plugins, those standalone plugins will still be directly associated with the performance team, developed in the monorepo, referenced from the PL main plugin etc. Removing / decoupling SQLite from PL would be different: We would still support getting the plugin towards WP core of course, but it wouldnโ€™t be in any way connected to PL anymore. Maybe that was clear, but just in case.
    • Next steps clarification:
      • @aristath I think the only thing to do here would be to remove the module from PL, and add a notice so in case the user previously had the module activated, theyโ€™ll be prompted to install the standalone plugin
      • @joemcgill I assume weโ€™ll remove the module from the performance lab plugin in the same release where we remove other modules. How we handle the transition so as to not break any active sites, is not clear to me at the moment.
      • @olliejones Do we have any usage telemetry to help guide that decision?
      • @flixos90 Potentially. As mentioned, I think this conversation is decoupled from the general PL unbundling effort, so we could do it at the same time, but also sooner. I would love to find a way to make the transition smooth though. For sites that already have the SQLite module active, we should probably recommend activating the SQLite plugin before deactivating the feature.
      • @aristath Thatโ€™s a good ideaโ€ฆ
      • @flixos90 Has anyone tried yet to activate the SQLite standalone plugin on a site where the PL SQLite module is already active? We need to make sure it doesnโ€™t throw fatal errors
        • @aristath Adding it on my TODO list for tomorrow, though from what I recall I tried it last month and I there were no issues. Iโ€™ll need to test that again just to be sure, itโ€™s been a long time
      • @10upsimon I feel strongly about not intentionally breaking users sites, however few are using it. Perhaps we need to defer the removal to 2 versions from now, and raise a notice or similar in the adminadmin (and super admin) making it very clear that from versionย nย it will no longer be supported as a core PL module.
        • @flixos90 agreed @10upsimon adding though that for a smooth transition the plugin should be activated before deactivating the PL module, so we have to make sure that that is actually possible
      • @joemcgill A similar transition plan will be good for all of the modules, to be honest, even though SQLite is the most critical due to potential breakage.
      • @flixos90 @joemcgill I think for the other modules weโ€™ll handle that in a central effort as part of unbundling, but with SQLite it will now be bit different, since that plugin will not be referenced directly from PL in the future. But I agree itโ€™s most critical there to have a smooth transition since switching back to a MySQLMySQL MySQL is a relational database management system. A database is a structured collection of data where content, configuration and other options are stored. https://www.mysql.com / MariaDB database accidentally will break any site that actually relies on SQLite right now

Priority Projects

Server Response Time

Link to roadmap projects

Contributors: @joemcgill @spacedmonkey @aristath

  • @spacedmonkey I landed lazy loading term 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.
    https://github.com/WordPress/wordpress-develop/commit/2c6bf77a9e7532c6ac3a03502b44d108cae86179
    • I hope to get comment meta in the next week.
      https://github.com/WordPress/wordpress-develop/pull/4128ย โ€“ Code review welcome
    • Related to term meta,ย https://github.com/WordPress/wordpress-develop/pull/4259ย also need code review
    • This saves around 15k calls to sanitise term function per page load
    • TLDR, there was no need to callย get_termย , we already had the term id, so just remove that
    • I also reviewed this โ€“ย https://github.com/WordPress/wordpress-develop/pull/4097 (amazing work @oandregal)
    • @joemcgill This is a huge one that I had noticed in my profiling research, so nice to see this already addressed!
    • @10upsimon Call me cheesy, but 15%ย server timeย alone across many WP hosts is a positive contribution to the environment alone
    • @mukesh27 With all this improvement, 6.3 is faster than 6.2
      • @flixos90 Yeah, this alone will make 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 performance in 6.3 almost as much faster as it got faster in 6.2
    • @flixos90 Certainly the highest performance improvement in a single PR that Iโ€™ve seen so far
    • @joemcgill Worth noting that the 15% improvement on that PR is compared against WP 6.1.1, not the commit prior to that one, so it would be interesting to A/B against the commit prior (if Iโ€™m reading the workflow correctly)
      • @flixos90 No, the 15% is against todayโ€™sย trunk. The original metrics on the PR are incorrect, but then I measured it againstย trunkย and thatโ€™s where the 15% come from

Database Optimization

Link to roadmap projects

Contributors: @aristath @spacedmonkey @olliejones @rjasdfiii

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

  • @10upsimon Regarding โ€œEnhancing the WP Scripts 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. with a Loading Strategyโ€:
    • Weโ€™ve had a good amount of feedback and iteration on our draft PR
    • Weโ€™ve had some valuable feedback come in this week, so weโ€™ll be addressing that with the goal of opening a PR against core later this week. Thanks @joemcgill @adamsilverstein and @westonruterย for the invaluable feedback thus far (and to @spacedmonkey)
    • Weโ€™ve established a mostly approved documentation plan/roadmap, with slight ongoing tweaks thereto. Draft documentation and documentation updates can commence soon
  • @flixos90 One more thing regarding JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. & CSS, last week I openedย https://github.com/WordPress/gutenberg/issues/49927ย to optimize how block CSS is loaded in classic themes (itโ€™s great in block themes, but not so much for classic themes, and we can probably improve that). There have been some great conversations on that.ย @aristath has pointed out a detailed code example with how we could improve this by printing inline styles per block type right before the first block of each type is rendered

Images

Link to roadmap projects

Contributors: @flixos90 @thekt12 @adamsilverstein @joemcgill

  • No updates this week

Measurement

Link to roadmap projects

Contributors: @adamsilverstein @olliejones @joemcgill @mukesh27

  • @joemcgill Iโ€™ve been working to prioritize a set of โ€œnext stepsโ€ for automated performance testing. For me, the โ€œnext stepโ€ is to turn these tasks into tracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets that we can address as capacity allows.
    • One of the big ones is to improve the stability of the results and make them more atomic, so we can use them to evaluate specific PRs (like the discussion we had earlier about theย get_block_templatesย PR)

Ecosystem Tools

Link to roadmap projects

Contributors: @joegrainger

Creating Standalone Plugins

Link to GitHub overview issue

Contributors: @flixos90 @mukesh27 @10upsimon

  • @flixos90 Weโ€™re still waiting to get the Fetchpriority standalone plugin approved, beyond that and then the same for Dominant Color, we have basically completed the work for โ€œMilestone 1โ€ inย https://github.com/WordPress/performance/issues/656
  • @flixos90 Separately, we need to explore what we want the user experience for โ€œMilestone 2โ€ to look like, both in terms of the regular UIUI User interface of the PL plugin going forward (in which it controls certain plugins as well as the Site Health modules), and for a smooth migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. from the modules to remove to their standalone plugins

New Projects / Proposals

  • @spacedmonkey I would love feedback on โ€“ย https://github.com/WordPress/performance/issues/718 a new module proposal for adding object caching information to site health
    • I want to make it easier for users to understand what kind of object cache they are using and what features it supports.
    • Specially if your object cache drop in supports multiple gets. I got a lot of questions after thisย articleย was published.

Open Floor

  • No updates

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

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

The benefits of prioritizing and measuring performance in WordPress 6.2

Based on lab benchmarks, WordPress 6.2 loads 14-18% faster overall 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 2-5% faster overall for classic themes (measured via Largest Contentful Paint / LCP). Particularly server-side performance (measured via Time to First Byte / TTFB) is seeing a major boost of 17-23% for block themes and 3-5% for classic themes, which directly contributes to the overall load time.

This post provides more information and a retrospective on how those performance wins were achieved in the WordPress 6.2 release cycle.

Learning from previous WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. releases

During 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). testing phase of WordPress 6.1 in November 2022, it became evident that a few notable performance regressions had made it into the release when compared to the performance of WordPress 6.0. While the single most impactful performance regressionregression A software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5. was addressed before the 6.1 stable release in one of its release candidates, overall performance still regressed slightly when using a block theme. Previous WordPress core releases, especially 6.0, saw more notable performance regressions. Despite other performance enhancements landing in those releases, the regressions effectively ended up canceling out the enhancements. In WordPress 6.2, this is significantly different, with all key metrics improving over the previous release, as highlighted in these performance benchmarks shared by @oandregal.

For WordPress 6.1, the regressions were discussed in a general assessment of WordPress 6.1 RC performance. Despite contributors from different core teams quickly prioritizing and investigating the issues, it was too late in the release cycle to address them all. This was a great learning experience: As much as we are working on performance enhancements, it is as important to continuously monitor performance of existing core features to avoid regressions. The more regressions there are, the less impactful any other performance enhancements are overall. While this seems logical and simple, it sometimes still takes an actual learning experience to get things right.

It is great to see that we have put these learnings into practice, and the performance wins in WordPress 6.2 demonstrate that. So what changed in the 6.2 release cycle?

Increased focus on performance measurement

When trying to summarize how performance work changed between the 6.1 and the 6.2 cycle in a single word, an increased focus on measurement proved to be the deciding factor. The following elaborates on the nuance of that simplified statement.

Identifying performance bottlenecks and opportunities for improvement

It was clearly visible that contributors were keen to rectify the 6.1 regressions and learn from that prior release. This already surfaced in the WordPress 6.1.1 follow up release which contained a few performance-related fixes: 12 of 30 tickets fixed in that release were focused on performance.

Numerous contributors from different core teams actively worked towards identifying and addressing performance bottlenecks, by both benchmarking and profiling WordPress core performance.

Profiling WordPress core has been tremendously helpful in identifying performance issues on the server-side, which has led to the notably improved TTFB performance we are seeing in WordPress 6.2. Common tools used for server-side profiling among contributors have been the open sourceOpen Source Open Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL. tools Xdebug and XHProf and the SaaS tool Blackfire. Contributors have been starting to define and document standardized ways for using these tools, which are intended to be published in the Make Performance Handbook soon.

For benchmarking WordPress core on the other hand, there was less clarity or known tools that could be used as is. While contributors initially came up with individual tooling of their choice to measure performance, the different benchmarking approaches had varying degrees of accuracy and ease of use, so it soon became clear that a more consistent approach would be needed. This was one of the key topics discussed in the first performance focused hallway hangout in January. From there, several contributors started more coordinated efforts for measuring performance, for both manual benchmarks locally and automated benchmarks via continuous integration.

The Performance Lead role

Another change that was made for the WordPress 6.2 cycle which has been supporting everything I have mentioned so far is the introduction of a new Performance Lead role as part of the release squad. This came as a result of the aforementioned performance focused hallway hangout, and I ended up stepping into this role for the 6.2 release. This enabled me to closely collaborate and support the other contributors and coordinate with them our performance measurement approaches. As mentioned before, I would like to emphasize that the performance wins in this release are a result of excellent work from several contributors on identifying performance weaknesses. The introduction of the Performance Lead role then merely brought a better representation of performance alongside the other members of the release squad.

I hope the role of the Performance Lead is here to stay, and I am excited to see additional contributors step into this role in the future.

Assessing performance on individual WordPress core patches / pull requests

As mentioned before, profiling is the recommended approach to identify performance bottlenecks in WordPress core. However, once a pull request with a potential fix is implemented, it is also crucial to measure the actual performance impact and through that validate whether the outcome is as expected. While profiling gives us an idea about the potential performance impact, it comes with caveats such as the overhead of the profiling tools running on the WordPress site, and also that it only captures a single request, which as mentioned above is subject to a good degree of variance when it comes to performance.

Various contributors in the WordPress 6.2 cycle benchmarked performance on individual pull requests, whether to prove a positive impact or performance or ensure that no regression is introduced. Different tools were used to assess the impact, often CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. commands like โ€œbenchmark-server-timingโ€ or โ€œbenchmark-web-vitalsโ€. The โ€œbenchmark-server-timingโ€ command has been most helpful for individual PRs with server-side performance impact, for example it was used in the #57502 ticketticket Created for both bug reports and feature development on the bug tracker. (see this comment), which is possibly the largest single 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. in the 6.2 release. The โ€œbenchmark-web-vitalsโ€ command however has still been useful for a few situations where performance decisions came down to exclusively client-side performance, for example in the #56990 ticket (see this comment), which explores the classic-themes.css performance impact.

Launching an automated performance testing workflow

In the WordPress 6.2 cycle, most of these benchmarks were conducted manually, which sometimes is a necessity due to the nature of the pull request, but other times is rather inefficient. Furthermore, it would not be feasible to benchmark performance manually for every WordPress core change โ€“ and that is precisely how a performance regression may be merged unnoticed. Several contributors have been collaborating on introducing an automated performance measuring CI workflow to WordPress core, and a first MVPMinimum Viable Product "A minimum viable product (MVP) is a product with just enough features to satisfy early customers, and to provide feedback for future product development." - WikiPedia was committed to WordPress core in [55459]. With this CI workflow, WordPress core performance metrics are now recorded for every single commit and are available in this dashboard. This allows us to easily spot a potential regression where previously it would have gone unnoticed. While at this point, there is still a sizable amount of variance in the data points and a limited number of metrics are available, the team will iterate in the coming weeks and months. This is only the starting point, and additional features like CWV support are already being planned. Needless to say, this is a major milestone and win for monitoring performance in WordPress core and will reduce some of the measuring workload already for the upcoming 6.3 cycle.

Assessing performance of WordPress core holistically

While assessing performance on every individual WordPress core change (pull request / commit) is very important to ensure continuous monitoring of performance and avoid regressions, it is also important to keep track of overall performance in WordPress core. This is particularly true during the Beta and RC stages of a release cycle.

At this point in particular, it is advisable to use the production ZIP version of WordPress core (e.g. a particular Beta or RC release) instead of measuring in the WordPress core development environment. The โ€œbenchmark-web-vitalsโ€ command mentioned in the previous section is perfect for this use-case, as it provides high-level performance metrics that capture both server-side and client-side performance. The resulting data can then be compared with the same metrics from e.g. the previous stable release, to get an idea how performance of WordPress core has changed (hopefully improved!) in the new release. This approach is what the numbers I shared in the beginning of this post are based on.

Performance benchmarks for WordPress 6.2

I would like to share a few more detailed numbers for the WordPress 6.2 performance improvements. Generally, I have been benchmarking two different scenarios, which showcase particularly the server-side performance enhancements (with #57502 contributing the most to them):

  • Home page using a block theme (Twenty Twenty-Three) with the default content (โ€œHello World!โ€ post)
  • Home page using a classic theme (Twenty Twenty-One) with the default content (โ€œHello World!โ€ post)

Since WordPress 6.2 included one notable client-side performance enhancement that affects only sites using images (see #56930), I included two more scenarios to assess that impact too:

  • Home page using a block theme (Twenty Twenty-Three) with the default content (โ€œHello World!โ€ post) and a featured imageFeatured image A featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. on that post
  • Home page using a classic theme (Twenty Twenty-One) with the default content (โ€œHello World!โ€ post) and a featured image on that post

For all of these scenarios, I then loaded the URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org 20 times using the โ€œbenchmark-web-vitalsโ€ command and recorded the metrics. The full metrics include more granular percentiles, but by far the most important ones are the medians (p50). Here is the data for the two scenarios with only the default โ€œHello world!โ€ post (no featured image):

ScenarioMetricWP 6.1.1 medianWP 6.2 medianDiff %
Block Theme: Twenty Twenty-ThreeLCP281.7ms241.15ms-14.39%
TTFB176.75ms137.8ms-22.04%
Classic Theme: Twenty Twenty-OneLCP209.65ms203.65ms-2.86%
TTFB75.3ms72.6ms-3.59%

For comparison, here is the same data for the two alternative scenarios where the post has a featured image. Note how the LCP improvement for block themes is even more pronounced in this scenario:

ScenarioMetricWP 6.1.1 medianWP 6.2 medianDiff %
Block Theme: Twenty Twenty-ThreeLCP292.8ms241.4ms-17.55%
TTFB167.7ms138.45ms-17.44%
Classic Theme: Twenty Twenty-OneLCP217.65ms206.95ms-4.92%
TTFB75.35ms72.85ms-3.32%

The full data can be inspected in this spreadsheet.

To close this section, it should be noted that of course the 4 scenarios above are not representative of what most actual WordPress sites look like. Some other benchmarks were using the theme unit testunit test Code written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression. data, and while that is more content, it is not necessarily more accurate either. There are inevitably limitations from lab analyses, and we will never be able to capture the โ€œaverageโ€ or โ€œrealisticโ€ WordPress site synthetically. However, the Core Performance Team is exploring a few good baseline scenarios as part of enhancing the aforementioned automated core performance testing CI workflow, and it would be great if in the 6.3 cycle we could align the benchmarks to use similar scenarios rather than every contributor including myself having their own scenarios for benchmarking.

For some of the individual ticket highlights that contributed to the performance improvements in WordPress 6.2, please see the recent core editor improvements post.

Comparing performance between block themes and classic themes

You may have noticed in the data above that the classic theme is apparently loading faster than the block theme. Let me clarify that a bit since, while that is technically true based on my benchmarks, the data may be deceiving at first glance.

Letโ€™s take another look at the data from the first table above: For the LCP metric, the classic theme already loads notably faster (203.65ms vs 241.15ms, based on the first two scenarios for WordPress 6.2), but for TTFB, itโ€™s almost twice as fast (72.6ms vs 137.8ms). Server-side performance is better in classic themes mainly because block themes have to handle more data since much of what a classic themeโ€™s code is responsible for is now handled through more dynamic features that furthermore rely on making additional database queries. However, it also needs to be acknowledged that block theme support in WordPress core is still relatively new (little more than 1 year old now), while the logic for classic themes has seen more than a decade of refinements. In other words, chances are there is still a lot of headroom for improving server-side performance of block themes, while for classic themes there is probably less of that. The performance improvements in WordPress 6.2 perfectly indicate that, noting that TTFB with a block theme has improved far more than TTFB with a classic theme.

Now here comes the most important part though: In client-side performance, block themes are much faster than classic themes. The way to spot that is by looking at the difference between the LCP metric and the TTFB metric, and hereโ€™s why: LCP can be considered representative of the overall load time, while TTFB is the server response time. So โ€œLCP minus TTFBโ€ is representative of the client-side load time. If you make this calculation for the above data points for WordPress 6.2, you can clearly see the benefits of the block theme when it comes to client-side performance (103.35ms vs 131.05ms). These benefits are evident due to the more dynamic logic that is applied in block themes to e.g. load scripts and stylesheets. Rather than the common pattern of enqueuing a big stylesheet and big script in the theme, block themes load assets more granularly and dynamically, only for what is actually needed on the current page.

You may argue that it doesnโ€™t matter that client-side performance is ~30ms faster in a block theme if at the same time server-side performance is ~65ms slower. Yes, in this benchmark the classic theme is overall ~35ms faster than the block theme โ€“ however that is without any caching. It is a common best practice for WordPress sites to use a full page cache to avoid the need for all the WordPress server-side logic to run on every page load or, even better, to avoid the request to hit the WordPress site at all in favor of serving a cached response. While by far not all WordPress sites use a full page cache, many do. And in that case, the server-side performance becomes potentially less relevant. Keep in mind however that even then improving server-side performance is still important: As mentioned, many sites still do not use a full page cache, and even for those that do, certain dynamic content is almost impossible to reliably cache. However, if your WordPress site uses primarily static content and a full page cache, block themes are already faster than classic themes today โ€“ because they are faster client-side. You can โ€œcacheโ€ away server-side performance problems, but you cannot do that on the client-side. In other words: Despite block themes being slower on the server-side, they provide a better foundation for building performant sites in the long run.

Appendix: Tools to measure and profile performance

To finish this post, here you find a list of links to some of the tools mentioned:

Props @annezazu @tweetythierry @desrosj @joemcgill @hellofromtonya @spacedmonkey for extensive review and proofreading.

#6-2, #performance

WP Feature Notifications: 2023 Status Update

The WP Feature Notifications (formerly WP Notify) project was first proposed in 2019 in order to improve and modernise the way in which WordPress handles user notifications.

In the last few months weโ€™ve had a good amount of progress, as well as a number of changes, which have led to the recent publication of prerelease 0.2.0.

0.2.0 โ€“ A robust 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 system

You can test out the current state of the feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins by downloading the latest release at https://github.com/WordPress/wp-feature-notifications/releases/latest. Please note that you will need to be using WordPress 6.2 or above.

Alternatively, if youโ€™d like to get involved in development, you can clone and build the repo at https://github.com/WordPress/wp-feature-notifications, which includes ongoing work for the 0.3.0 milestone.

What originally started as a UX proof of concept has evolved into a more sophisticated JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors.-based system for displaying notifications based on serialised data. At the moment this uses static dummy data, however in a future update this will interface with the upcoming REST controllers to display persistent data.

Props to @codekraft and @bitmachina for some exceptional work here, which has really progressed the project.

Leadership, planning and the team

After extensive work as project lead, @psykro has decided to step down from the role. On behalf of the whole team, Iโ€™d like to thank him for the massive contributions heโ€™s made, and the time and effort heโ€™s put into the project over the last few years. @sephsekla has taken over project leadership in his stead.

In addition to our weekly office hours (15:00 UTC on Wednesday), @sephsekla, @codekraft, @bitmachina and @jason_the_adams have started a monthly planning call, in order to better scope out the future of the projects

To support the projectโ€™s long-term goal of becoming part of WP CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., the team is looking for partnership from a core committercommitter A developer with commit access. WordPress has five lead developers and four permanent core developers with commit access. Additionally, the project usually has a few guest or component committers - a developer receiving commit access, generally for a single release cycle (sometimes renewed) and/or for a specific component., who can provide guidance on strategy as well as potential barriers to entry.

Core Feature vs Canonical 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.

Mattโ€™s post around Canonical Plugins late last year sparked some discussion as to whether this should be an option to consider for the future of the project. While this is a valuable concept, and indeed the approach taken for development, the team are in strong agreement that the update to notifications should be merged when ready, and not kept as a separate plugin.

To quote the original project proposal by @psykro and @schlessera:

WordPress is currently lacking a fundamental mechanism: sending notifications to users to give them feedback about state changes in the system.

Notification functionality is indeed fundamental, and already in constant use via the admin_notices hook, a workaround that has major issues of standardisation and accessibility. The 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. needs to be universal, and available by default, otherwise admin_notices will remain the de facto option.

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/ Phase 3

The team was excited to see the upcoming evolution of the adminadmin (and super admin) experience, which was recently detailed in https://make.wordpress.org/core/2023/03/24/phase-3-collaboration/. As the WordPress dashboard continues to modernise, we are keen to play our part in improving the current admin_notices experience. Itโ€™s crucial to ensure that our designs and functionality mesh with the work being done here.

Roadmap and Next steps

The team has recently picked up momentum, but there is still much to be done in order to achieve the projectโ€™s goals. Currently the focus is on refining scope and transforming the demo into a minimum viable productMinimum Viable Product "A minimum viable product (MVP) is a product with just enough features to satisfy early customers, and to provide feedback for future product development." - WikiPedia (MVPMinimum Viable Product "A minimum viable product (MVP) is a product with just enough features to satisfy early customers, and to provide feedback for future product development." - WikiPedia). The upcoming 0.3.0 prerelease is planned to be a minimal, but functional notification system, with all demo content removed.

The next (and largest) piece of the puzzle is persistent database storage of notification data. Weโ€™re working on finalising the proposed schema, as well as discussing other issues such as retention, translations, 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 support and more.

As we move on to this major phase, the team would greatly welcome additional contributors onto the project, particularly developers specialising in PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher and SQL.

Expect a consultation and call for feedback on how we approach this database architecture soon!

Get involved

The project is always on the lookout for new contributors. If you would like to contribute to the project, we invite you to join the #feature-notifications channel in the Making WordPress Slack for our weekly office hours, every Wednesday at 15:00 UTC.

We will have a presence at the 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. Europe 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/, where we would love to see some new contributors. Regardless of skill set or expertise, Developers, designers, users or any other interested parties are very welcome!

Props to @erikyo and @bitmachina for their collaboration writing this post, and and @bacoords and @psykro for reviewing.

#feature-notifications

Performance Chat Agenda: 25 April 2023

Here is the agenda for this weekโ€™s performance team meeting scheduled for April 25, 2023 at 15:00 UTC.


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

A Week in Core โ€“ April 24, 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 April 17 and April 24, 2023.

  • 27 commits
  • 36 contributors
  • 51 tickets created
  • 6 tickets reopened
  • 53 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/Tests Tools

  • Correct the expected quotes in get_comment_author_url_link() tests โ€“ #57839

Bundled Themes

  • Twenty Nineteen: Fix a translationtranslation The process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. issue in Comments navigation text โ€“ #58149

Coding Standards

  • Escape edit profile URLURL A specific web address of a website or web page on the Internet, such as a websiteโ€™s URL www.wordpress.org in default_password_nag() โ€“ #58182
  • Remove unused $key variable in wp-admin/network/sites.php โ€“ #57839
  • Update code layout in default_password_nag() for readability โ€“ #57839
  • Use more meaningful variable names in various comment functions โ€“ #57839
  • Use strict comparison in wp-admin/includes/class-wp-ms-sites-list-table.php โ€“ #58139
  • Use strict comparison in wp-admin/includes/class-wp-site-icon.php โ€“ #57839
  • Use strict comparison where strtolower() is involved โ€“ #57839
  • Use strict comparison where trim() is involved โ€“ #57839

Docs

  • Use third-person singular verbs for WP_Importer related function descriptions, as per docblocks standards โ€“ #57840
  • Use third-person singular verbs in various function descriptions, as per docblocks standards โ€“ #57840

Editor

  • Add selectors field to 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. type definition โ€“ #57585

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 a few 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. HTML comment forms โ€“ #58007
  • Ensure attribute updates happen only once for case variants โ€“ #58146
  • Fix a case where updates are overlooked when seeking to earlier locations โ€“ #58160
  • Update code style so it passes when backported into 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/ โ€“ #58170

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.

  • Use correct translation function in wp-admin/includes/media.php โ€“ #58138

Networks and Sites

  • Simplify the check for main site on Networknetwork (versus site, blog) Adminadmin (and super admin) โ†’ Sites screen โ€“ #58150
  • Use is_main_site() in a few more places โ€“ #58150

Script Loader

  • Improve code style and readability in _wp_normalize_relative_css_links() โ€“ #58069
  • Optimize performance of _wp_normalize_relative_css_links() by more than 2x โ€“ #58069, #54243

Security

  • Update 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/ security policy to refer to H1 โ€“ #57937

Site Health

  • Bump the recommended MariaDB version to 10.4 โ€“ #58158

TaxonomyTaxonomy A taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies.

  • Always lazily load term 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. โ€“ #57645

Users

  • Cache database queries within WP_User_Query class โ€“ #40613
  • Change cache group from users-queries to user-queries โ€“ #40613

Props

Thanks to the 36 people who contributed to WordPress Core on Trac last week: @sergeybiryukov (6), @mukesh27 (4), @dmsnell (4), @spacedmonkey (4), @peterwilsoncc (3), @audrasjb (3), @afercia (3), @poena (3), @aristath (3), @mujuonly (2), @costdev (2), @hellofromTonya (2), @krupalpanchal (2), @pouicpouic (2), @jbcouton (1), @jankyz (1), @flixos90 (1), @rjasdfiii (1), @khoipro (1), @OllieJones (1), @srikanthmeenakshi (1), @strategio (1), @dd32 (1), @westi (1), @zieladam (1), @johnjamesjacoby (1), @JavierCasares (1), @ecorica (1), @westonruter (1), @vladytimy (1), @desrosj (1), @aaronrobertshaw (1), @ntsekouras (1), @utsav72640 (1), @laurentmagnin (1), and @sabernhardt (1).

Congrats and welcome to our 4 new contributors of the week:ย @pouicpouic, @jbcouton, @ecorica, @laurentmagnin โ™ฅ๏ธ

Core committers: @sergeybiryukov (11), @audrasjb (5), @spacedmonkey (3), @zieladam (2), @bernhard-reiter (2), @gziolo (1), @peterwilsoncc (1), @azaozz (1), and @westonruter (1).

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

Editor chat summary: Wednesday, 19th April 2023

This post summarizes the latest weekly Editor meeting (agenda, slack transcript), held in the #core-editor 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, on Wednesday, April 19, 2023, 14:00 UTC.

General Updates

Open floor

Todayโ€™s meeting attendance was very low. It started with only two people. During the whole hour @andraganescu @fabiankaegy @bph and @opr18 discussed turning the editor chat into office hours.

There was an attempt to revamp the editor chat last year as well, see the proposal in the improvements to the Core Editor chat agenda and format, but they did not amount to much in terms of generating more interest and participation to this coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. chat.

In terms of turning it into a sort of office hours the Gutenberg Developer Hours series of events was mentioned as a potential starting point.

As always, if youโ€™d like to participate into the evolution of this meeting leave a comment below!

Note: Anyone reading this summary outside of the meeting, please drop a comment in the post summary, if you can/want to help with something.

Read complete transcript

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

#core-editor

Dev Chat Summary, April 19, 2023

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

Key Links

Announcements

  • Whatโ€™s new in Gutenberg 15.6? (19 April): Check out the post for details on whatโ€™s new in this latest 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.

Highlighted Posts

Hereโ€™s the activity in TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. between April 10 and April 17, 2023:

  • 13 commits
  • 33 contributors
  • 39 tickets created
  • 4 tickets reopened
  • 27 tickets closed
  • and 6 new contributors ๐ŸŽ‰

Maintainers: Component Help Requests

For the Upgrade/Install component, @costdev provided the following updates:

  • Rollback: Waiting on confirmation fromย @azaozzย that there are no blockers for alpha commit.
  • 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. Dependencies: Waiting onย @dd32ย /ย @otto42ย to confirm that the current PR for Plugin Dependencies contains nothing of concern forย 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/, and that Plugin Dependencies Part 2 is the bit that still needs more discussion/investigation.

Open Floor

6.2.1 Planning

@jeffpaul asked if there had been discussion on timing and focus for the 6.2.1 minor releaseMinor Release A set of releases or versions having the same minor version number may be collectively referred to as .x , for example version 5.2.x to refer to versions 5.2, 5.2.1, 5.2.3, and all other versions in the 5.2 (five dot two) branch of that software. Minor Releases often make improvements to existing features and functionality.. @costdev provided a couple of links (1, 2) from the #6-2-release-leads channel that called for a small squad of volunteers to lead the release. In the comment, @audrasjb suggested 6.2.1 RC1 on May 9, followed by final release on May 16, and asked for input. @ironprogrammer directed volunteers to reply in the #6-2-release-leads channel.

There were no further topics raised, so the meeting wrapped up early.

Next Meeting

The next meeting will be on April 26, 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.

Props @costdev for peer review of this summary, and to everyone who contributed in todayโ€™s Dev Chat.

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