Hallway Hangout: Performance Considerations for Block Themes

As more is being done to work on performance as it relates 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. themes, a hallway hangout has been planned to bring together folks from various backgrounds to see what else can be worked on, unblocked, and better understood. This is meant to be both a knowledge sharing and alignment creating session between folks from various areas including but not limited to @flixos90 @adamsilverstein @spacedmonkey @youknowriad @desrosj @tweetythierry @oandregal @aristath.

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

At a high level, we’ll go through general intros (what each person does/focuses on), current work underway to address performance, what work is being done specifically for block themes, and general open Q&A. Hallway hangouts are meant to be casual and collaborative so come prepared with a kind, curious mind along with any questions or items you want to demo/discuss.

Recording

Attendees:

@flixos90 @adamsilverstein @spacedmonkey @tweetythierry @oandregal @priethor @clarkeemily @daisyo @greenshady @annezazu @scruffian @josephscott @mihai2u @joegrainger @delawski @sergiomdgomes @luminuu @hellofromtonya mukesh27 Felix Arnes, Didier Mahaux, and Simon (didn’t catch a last name).

Notes

Overall themes to the conversation:

  • There’s difficulty in this work partially due to how backports happen from GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/ to CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. both for finding and fixing regressions.
  • There’s still a big need to have solid measurements and track them in some level of granularity for both Core and Gutenberg.
  • There’s great potential in Block theme performance because of how they are built to improve performance.
  • Some level of changes in performance is okay but we need to avoid major regressions and not let perfect get in the way of good enough.
  • A Performance role for the upcoming 6.2 release squad should be considered to improve coordination between various teams and focuses.

Theme.jsonJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. performance & avoiding major performance regressions with merging Gutenberg into Core 

  • We kicked the call off discussing issues in 6.1 around caching data in theme.json, which led to a broader discussion around merging Gutenberg into Core in a way that avoids regressions.
  • Andre shared how performance is measured in Gutenberg (typing, time it takes to load a big post, etc) for each release. You can see the results of each test in the various release posts under “Performance Benchmark”.
  • Some performance concerns for 6.1 happened only via manual testing. How can we automatically find this rather than needing to manually manage much of this work?
  • Testing needs to happen both in Gutenberg and with Core.
  • It’s not always easy to spot performance concerns in 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 for a variety of reasons:
    • How code is ported from Gutenberg to Core making it hard to track problems down with this example shared of the kind of large backports that happen.
    • Iteration happens much faster on the Gutenberg side than Core.
    • Inconsistencies in results depending on the tool used.
  • A question was raised around whether there is load time performance tracking on the front end for Gutenberg. This currently doesn’t exist but it was agreed that it should be explored.
  • Tonya shared how iteration happens much faster on the GB side with Core happening less frequently so when we think about performance, we want to think about strategies for how we can do it on a faster basis. Let’s not wait until we get into Core and let’s retest when it gets added to Core. 
    • Tonya’s team is working on improving the backporting process with sooner and smaller backports to Core to get them in throughout the development cycle. If it’s ready, backportbackport A port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. it rather than waiting. 
    • Part of this work is making sure Gutenberg back end code is Core ready (runs against same thing so when backports are ready to go, it’s Core ready). 
    • Tonya is going to do a Make post to cover what her team is working on.
  • Jonny brought up confusion around where to make changes when performance concerns are found. This is a larger conversation and it was agreed to bring that discussion into a different space to preserve the conversation around performance.

Avoiding regressions in Classic themes & how performance is measured

  • Adam brought up an example of a performance concern with Classic themes that has yet to be addressed: https://core.trac.wordpress.org/ticket/56990 
  • Jonny is doing very manual testing to try to catch things as much as possible. Having automated tests would be huge along with being able to generate a spreadsheet comparing RCs, commits, etc.
  • Database queries are usually a sign that something is loading that shouldn’t be loaded. It’s not always obvious but it can act as an early warning sign that something isn’t working.
  • Joseph previously volunteered for the measurement side but got pulled into other things. It sounds like this is still a significant need to figure out, do measurements, and track them in some level of granularity (per day, per commit, per release) for both Core and the Gutenberg plugin. 
  • Sergio shared more around the WordPress.comWordPress.com An online implementation of WordPress code that lets you immediately access a new WordPress environment to publish your content. WordPress.com is a private company owned by Automattic that hosts the largest multisite in the world. This is arguably the best place to start blogging if you have never touched WordPress before. https://wordpress.com/ side of things with lots of tooling being run tools for WordPress.com servers which wouldn’t apply well to this situation since they are not particularly suitable to ongoing development. 
  • Felix discussed measuring server side performance by using server timing metrics to see how many ms certain processes take. In theory, you could have something that could receive server timing metrics. 
  • The performance dashboard for Gutenberg was discussed as a spot to make more robust and port in more tracking: https://codehealth.vercel.app/ 
  • The general topic of how to measure PRs to reflect real improvements in production came up with Andre sharing how depending on the tool used there are wildly different responses in performance impact. 
  • Jonny brought up how complex this can get when you add in object caching, PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher versions, etc. Any performance metrics would need to have a matrix of configurations to cover cases. 
  • In general, need to also look at regressions individually because they might be different to a different degree depending on environment. 
  • An example was shared of how to use the server-timing api in wordpress/gutenberg with an implementation of it to the Performance Lab plugin: https://github.com/WordPress/performance/pull/553 
  • Adam ended this section of the conversation with a great reminder that some level of small changes in performance in normal but we need to avoid major regressions. Let’s not let perfect get in the way of good enough.

Core web vitals and block themes. What parts of Core can be improved out of the box? What are we doing specifically around block themes? 

  • Jonny shared that because of theme.json, Block themes are slower than Classic themes with work underway for them to be on par with Classic themes. There’s an amazing opportunity to do performance work with Block themes because everything is a block. You could prefetch image assets, ensure images above the fold are loaded, etc once you know entire markup of page before headers are sent.
  • Joseph brought up an issue around lazy loading LCP images that was implemented in a previous release but didn’t make it to block themes (only made it to classic). This is pending for the next release
  • Discussed various ways enhancements could happen with script and resource loading (CSSCSS Cascading Style Sheets. file loading, font loading, etc) as well as lazy loading things as well beyond just images (what about CSS?). For example, if a block is in the footer of the page, could load later on.

Thoughts around better ways teams can work together around improving block themes. 

  • In particular, this refers to the Core Editor, Core, and the Performance teams since we’re all ultimately a part of broader WordPress efforts and we can use our unique expertise to be better together.
  • Discussed having another hallway hangout specific for WordPress 6.2 items to have more practical, hands on things to go through.
  • Anne threw out the idea of having a Performance related role for release squad and will follow up to more formerly propose.
  • Jonny brought up ensuring folks are giving the time to respond during releases and to pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” early. At the same time, Tonya reminded us to avoid having bottlenecks and to practice reviewing something after it’s merged to still fix what’s found.

Next steps:

  • @hellofromtonya will share a Make post about the work her team is doing at Automattic around more continually backporting items from Gutenberg into Core.
  • @annezazu will suggest a performance role on release squad (with +1 from Tonya, Jonny, and Thierry).
  • @annezazu will follow up with a 6.2 related performance hallway hangout once 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 is released.
  • @adamsilverstein will share a Make post on an automated testing environment and possible steps there.

#hallwayhangout, #performance

Enhancing the Scripts API with a loading strategy

Overview

This post outlines a proposal to add a script loading strategy enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. to coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.’s existing 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..  

The underlying goal of this effort is to make it easier for WordPress 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 and theme developers and core to use “modern” loading approaches for 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/. (like defer and async), which will help WordPress sites load faster and operate more smoothly, giving users a better experience.

Why add a loading strategy?

Data from the Web Almanac project (query) indicates that render blocking JavaScript is a significant problem on the web, with 77% of mobile pages having render-blocking scripts in the document <head> . This query shows that approximately 40% of WordPress sites stand to benefit from deferring additional scripts. Adding defer or async to script tags enables script loading without “blocking” the rest of the page load, resulting in more responsive sites overall better user experience.

Currently WordPress core as well as plugins and themes register scripts with the wp_enqueue_script and/or wp_register_script functions. Although these functions include the ability to control the placement of the script (with the in_footer parameter), they don’t include support for adding modern attributes such as defer or async to script tags. 

To add async or defer today, developers must resort to less flexible and more fragile approaches, such as directly filtering the tags at the point of output (using  the script_loader_tag 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.), or handling the 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.) output directly using wp_print_script_tag and the wp_script_attributes filter.

Using the first approach and directly filtering the tag can easily break: for example if two plugins both try to filter a tag, or if a tag has unexpected attributes already (eg. adding defer to a tag that already has async). Using the the second approach developers must carefully handle dependencies and output manually – things that that the Scripts API usually helps take care of.

How the loading strategy works

Developers specify a loading strategy when registering or enqueueing a script. For example, a defer strategy can be specified when the script isn’t required immediately during the page load cycle. WordPress will then determine which scripts can actually use a strategy based on logic for each strategy. For example, to ensure that scripts are executed in the order they are enqueued, defer can only be used on a script if every script that depends on that script can also be deferred. Inline script tags added with wp_add_inline_script would also be considered to ensure proper execution order.

The implementation would come with several initial built-in loading strategies: defer, async, and the default blocking behavior.

Out of scope for this feature

The loading strategy does not enable direct control of script tag attributes. This idea was originally proposed 10 years ago in #22249 and several approaches were considered on that ticketticket Created for both bug reports and feature development on the bug tracker. including a script attribute filter. This proposal takes a step back and aims to solve the script loading strategy aspect more comprehensively and directly while avoiding exposing the potential complications of direct attribute control.

It is worth noting that it is already possible to control attributes on wp_enqueue_script tags directly using the script_loader_tag filter. However, this is a bit of a “brute force” approach which is limited and fragile because it doesn’t consider dependencies and multiple plugins can take conflicting actions on the same tag. 

What are potential concerns with this feature?

One big concern with adding this feature to the WordPress Script API is potentially introducing a breaking change. wp_enqueue_script is a fundamental API in WordPress core, and any breaking changes could have widespread implications. Possible breakage is a possible reason that adding custom attributes as proposed in #22249 was never added to core.

This new proposal aims to ensure that there is 100% backwards compatibility, resulting in zero risk of breakage. The loading strategy will ensure that all existing uses continue to function as expected; for example, passing the boolean in_footer attribute will still control script placement. In addition, it will ensure that scripts continue to be executed in the order they are enqueued – as described above in the “How the loading strategy works” section.

Conclusion and Next Steps

Giving developers the ability to specify a loading strategy will enable them to use more advanced JavaScript loading methods while still ensuring that enqueued scripts are executed in the correct order. A “strategy” approach is also forward thinking: as the web evolves, new strategies can be developed and made available to WordPress developers. After gathering feedback, we will proceed to discussing the implementation approach and, ultimately, proposing 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..

Have you tried using defer or async with WordPress (or do you already)? How do you think this enhancement would change that? Please leave your feedback about this proposal in the comments below and if you can, join us at our weekly performance team chats, where we are likely to discuss this proposal in the future.

Thanks to @flixos90, @tweetythierry and @mxbclang for help writing and reviewing this post and for the many contributors who have added to the discussion around this enhancement already.

#core, #feature-projects, #javascript, #performance, #proposal

Performance team meeting summary 12 April 2022

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

Focus group updates

Announcements

@mxbclang

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” in Slack
  • @furi3r: Looking for feedback on PR for Add Site Health test for full page caching (advanced cache) #220
  • @furi3r: Not directly related to Site Health, but also working on adding preload support to coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. in Add support for preload links (similar to resource hints) #42438; there’s a related issue for Performance Lab: Preload resources #31. Looking for review.

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

  • No updates

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

  • No updates

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Open floor

  • @mitogh: We have a lot of issues labeled as Needs Discussion that haven’t been moving. What can we do to move those forward and prevent a big backlog? Recommend using a priority base system on labels similar to the ones used on issues and use this time to discuss next steps or if issues should be closed because they’re not relevant at this time.
  • @khoipro: Do we have concerns about mobile vs. desktop caching?
    • @mitogh: Full HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. caching or something else?
    • @khoipro: Object caching. I’m using Total Cache and it lost a deal with different breakpoints if using PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher to test a device agent, but Swift Performance supports it.
    • @mitogh: The user agent can be used as part of the key for the cache in order to invalidate cache when a different agent is used. This issue seems related to how 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 manages their keys.

Help wanted

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

Performance team meeting summary 5 April 2022

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

Focus group updates

Announcements

@mxbclang

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

  • No updates

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Images

@adamsilverstein @mikeschroder

GitHub project

Enabling webP by default discussion

@adamsilverstein

  • There has been quite a bit of feedback on the proposal to Enable WebP by default in core
  • Originally proposed in the WP 5.8 WebP support post in June 2021 and implemented in the Modern Images plugin for testing in July 2021, then merged into the Performance Lab 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 in December 2021
  • This approach is gaining popularity because WebP is becoming so widely popular – Wix and Shopify are both moving in this direction
  • Original feature focused on replacing JPEG subsize output with WebP output; during dev, it became clear that adding WebP as a second type was safer and more backwards compatible
  • This approach is a trade off that favors backwards compatibility over storage space or number of files
  • The important criticisms shared in the comments on the proposal were (in order of number of times mentioned):
    • There should be controls (toggle) for the feature under Settings->Media
    • Adding an additional sizes to image generation will consume too much disk space, causing sites or backups to fail or increase storage cost
    • WebP problems: not supported everywhere (email clients, RSS readers, lazy loading), enabling by default will cause problems (for example saving images from site), AVIF or MozJPEG is better
    • The feature should default to off, or default to off for existing sites
  • Given this feedback, here are the options that we want to consider moving forward:
    • Add controls in Settings->Media – most popular request. What should this look like?
      • A simple, single toggle: “Enable modern image formats” (?)
      • Plugin for full controls: source mime -> output mimes mapping, output preference
      • Should we include an option for “only modern formats”?
    • Change the default behavior – second most popular request:
      • Disabled by default for existing sites (opt in)
      • Enabled by default for new sites (opt out)
      • Consider enabling by default for all sites in WordPress 6.1 (opt out)
  • @loop9: This should not be a forced change or require a filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. to opt-out. It should be opt-in with a simple toggle to opt in.
  • @eatingrules: There needs to be explanation alognside the controls, as well, to explain the pros/cons
  • @jb510: Add a toggle; WebP could be on by default for new installs, but not existing
    • @eatingrules: That’s just kicking the can down the road for space/inodes issues
    • @jb510: Difference on new installs is that storage requirements would grow over time with uploaded images
    • @eatingrules: Yes, but still doubling down on technical debt
  • @OllieJones: If enabled, viewing/downloads should not be made the default until a bulletproof <picture> <source> way of generating images is also available
  • @dainemawer: If you choose to go with WebP, storage issues will always be a possibility, so how does a toggle solve this?
    • @adamsilverstein: Good point, it would help if there was an option to only generate WebP
    • @dainemawer: Yes, and the very existence of add_image_size is more of an argument about storage than a change in format
  • @eatingrules: Another concern: WebP is not always smaller than JPG
  • @jb510: We ought to be focusing first on eliminating the needless creation of thumbnails, but that’s out of scope here
    • @eatingrules: May be out of scope, but should be fixed before this doubling of images happens
    • @adamsilverstein: See https://github.com/WordPress/performance/issues/14
  • @blogaid: Why is fixing the thumbnails issue out of scope here? That is the greatest concern with the WebP generation of more images. It should be addressed to further cut down on image bloat.
    • @jb510: This is about supporting WebP in coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.. The thumbnails issue is regardless of media type, so that ought to be its own topic
    • @blogaid: But it needs to be addressed before adding WebP images
    • @loop9: Opt-in movement is being pushed aside and it seems like it’s not even being considered
  • @flixos90: The storage problem only happens because we are generating WebP and JPEG subsizes. The original proposal was to only generate WebP subsizes, which would reduce necessary storage. How commonly would a site still need to use JPEG versions? Do we really need to do this?
  • @adamsilverstein: One idea was to generate only WebP except for “full” size images, which could be in both WebP and JPEG
  • @eatingrules: One issue that has surfaced for us in the past is when site owners do a right-click > Save As, WebP causes significant confusion and problems
    • @flixos90: Fair point, but not a WebP issue only
    • @eatingrules: Yes, but will still be an issue until a format 100% replaces JPEG
  • @adamsilverstein: Having some kind of control in settings would alleviate most concerns, but what exactly would that look like?
    • @zero4281: Agreed that most of this could be handled by limiting controls
  • @eatingrules: This should be 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. and not in core. Would love to see this as an easy-to-use, more compatible plugin that optimizes images.
  • @blogaid: Need to reevaluate if this feature is needed at all instead of spending more time fixing it. Where is the documentation that shows that the majority of site owners want this feature and how many sites it may harm?
  • @flixos90: We need to be careful to not interpret comments as a vote. It’s natural that concerns are more likely to be raised than agreement. We want to see concerns addressed, but want to talk about concerns instead of just “people don’t want it in core”
  • @loop9: Zero thought seems to be going to those who care more about quality vs. actual speed, like photographers
    • @dainemawer: There is no degradation of quality with WebP
  • @seedsca: This will cause compatibility issues across several use cases, vote not to implement
  • @blogaid: Would instead like to see MozJPEG supported all the way through thumbnails so that they also have progressive load and a modern format
  • @eatingrules: The discussion here should be whether or not this should be in core in the first place. Has that already happened?
    • @jb510: Yes, there’s a large consensus and this discussion is about how best to move to modern file types in WP
  • @flixos90: There are three focuses that we need to keep in mind: 1. most backward compatibility, 2. best performance, and 3. least filesystem storage
  • @seedsca: This plugin isn’t even out of 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. yet; why are we talking about merging this into core?
    • @jb510: This is the point of the plugin
    • @eatingrules: 6.0 is coming up soon and there hasn’t been any time to test
    • @flixos90: The plugin’s version is solely for infrastructure testing, not the feature itself
  • @spacedmonkey: Maybe we should not put this in 6.0 and give the community and hosting companies time to test the performance plugin for awhile. It could be a headline feature in 6.1.
    • @eatingrules: Yes, my personal issue is partly because of the speed at which this is moving

Feedback requested

Help wanted

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

Performance team meeting summary 29 March 2022

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

Focus group updates

Announcements

@mxbclang

  • @flixos90: 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. release schedule update

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

  • No updates

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Open Floor

  • @thelovekesh: After adding Partytown, JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. tests are failing and giving the error Error: Cannot find module `prettier`. When I update @wordpress/scripts to the latest version, tests work. Should I raise a PR?

Help wanted

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

Performance team meeting summary 22 March 2022

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

Focus group updates

Announcements

@mxbclang

  • Meeting time change
    • Beginning next week (Tuesday, March 29), meeting time will shift to 15:00 UTC, one hour earlier than our previous time of 16:00 UTC
    • This is to keep the meeting at a more appropriate time for people in Europe and lessen the impact of biannual time changes in the US
  • Released 1.0.0-beta.3 today
    • Discovered a bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. where modules are not actually activated by default #247; PR with a fix is ready to merge; please test if you have a moment
    • No release party since this is a small hotfix
    • The current 1.0.0-beta.3 milestone has been renamed to 1.0.0-beta.4
  • @flixos90: 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. release schedule
    • Suggest that as long as we’re in beta (or later, 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).), we publish a release every two weeks; coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. uses a similar cadence in beta
    • Once we get to 1.0.0 stable, we can reassess
    • Should we change to RC after 1.0.0-beta.4? Obviously this is a beta testing 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 to a degree, but the beta is mostly related to the overall plugin infrastructure and the plugin being completely new
    • @tweetythierry: What are the defining factors for stable? More testing? Things to finish?
    • @pbearne: Versioning will be strange because we hope some features will get into ccore
    • @flixos90: A bit fuzzy with this plugin because everything is in a different stage. Good idea to plan for one more beta release for now and use the next two weeks to try to really break the plugin infrastructure and find any other bugs.
    • @tweetythierry: Remember that as we keep adding more new stuff to beta versions, we are exposed to more bugs since there isn’t a code freeze. In favor of more testing on the current code base (or limited changes) and shipping as stable in 2-3 weeks.
    • @flixos90: Will likely be at least 4 weeks; we’d want 1-2 RC releases first
    • @tweetythierry: Given the long beta, 1 RC would probably be fine, so targeting stable in 4 weeks would be great
    • @flixos90: Proposed schedule: 1.0.0-rc.1 on April 4 and 1.0.0 stable on April 18
    • @spacedmonkey: Noting that WP 6.0 beta 1 in April 12 and beta 2 is April 19, so some folks will be busy with core work
    • @flixos90: See Plan release path towards stable #253 and comment there with thoughts

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Open Floor

Help wanted

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

Performance team meeting summary 15 March 2022

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

Focus group updates

Announcements

@mxbclang

  • Meeting time change
    • Traditionally coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. meetings shift to accommodate for DST
    • We will adjust our meeting to its original time of 16:00 UTC after DST goes into effect worldwide on Sunday, March 25
  • Support representatives for Performance Lab plugin forum
    • @mxbclang (Google 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 support lead), @jamesosborne (who works on support for Google plugins), and @mitogh (one of the technical leads on the project for 10up) will be monitoring the support forumSupport Forum WordPress Support Forums is a place to go for help and conversations around using WordPress. Also the place to go to report issues that are caused by errors with the WordPress code and implementations. and replying to topics
    • We’re always looking for help, so if you’re interested in being designated as a plugin support representative, please reach out to Bethany

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” in 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/.
  • @furi3r: Interesting conversation in https://github.com/WordPress/performance/issues/92#issuecomment-1067312175.
    • @flixos90: Would like some more thoughts here. Like the idea of pointing out a problem where relevant, but concerned that there’s a lack of actionable guidance here. Three options here:
      1. Merge it as is regardless of the concerns
      2. Merge it as experimental for now while addressing the concerns for a follow-up release
      3. Delay merging until the concerns have been addressed
    • @furi3r: Intention was that this would be used by hosting companies and all of them have guides on how to tackle the problem. By default, we’re pointing to https://wordpress.org/support/article/optimization/.
    • @flixos90: Fair point, but we should also have some sort of useful default
    • @spacedmonkey: With white screen of death protection, we added a filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. to enable hosting companies to link off to resources to help. I think this issue is the same. Handling messaging and resolving this, is for the hosting company, IMO.
    • @flixos90: We also included a default way for the user to fix the problem, though, which is missing more detail
    • @spacedmonkey: Agreed that once this goes into core, we need a solution. But for now, we don’t need one in the plugin, as everything in it is experimental.
    • @flixos90: “Experimental” has some nuance; some modules are days away from a feature proposal, others are more recent and earlier in exploration.
    • @tweetythierry: The definition of “experimental” has come up enough that we should document and define it.
    • Vote on a decision here by Friday, March 19 at 5pm UTC

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

  • No updates

Feedback requested

Infrastructure

@flixos90

GitHub project

  • @flixos90: We now have plugin assets (banner and icon) in Performance Lab: Branding #144; just opened https://github.com/WordPress/performance/pull/231 to add to the repo and will deployDeploy Launching code from a local development environment to the production web server, so that it's available to visitors. to 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/ in the next release. Merged a few PRs in the last few days, including a bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. fix. Ready to enable 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". auto-deletion in #209 after chat. With all these enhancementenhancement Enhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature. and fixes, proposing (and confirmed with team) that we will ship our next 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. release next Monday, March 21, two weeks after the first release. We only have a few issues and PRs in the milestone, which we can probably merge this week. If you have concerns, please comment on Prepare 1.0.0-beta.2 release #213.

Feedback requested

Open Floor

  • @jeffpaul: Are there any core patches (e.g., new hook in media library) that would be helpful to get into WP 6.0 to benefit this feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins. work ahead of whatever future feature merge (e.g., in WP 6.1)?  I want to make sure we get to those things before WP 6.0 Beta 1 on April 12th.
    • @flixos90: If you’ve been working on one of the enhancements or want to work on something where you’re limited e.g. by lack of core filters or actions, now it’s the time to flag those problems
    • @pbearne: Here’s one: https://core.trac.wordpress.org/ticket/55347
  • @craigfrancis: Can someone do a quick check on my very basic PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher perf test for #52506 at https://wpdb.eiv.dev/ (press the “001” button to see the PHP code for the first test)? I appreciate it does not account for TurboBoost, CPU temperature changes, or other processes on this VM or others, etc… I’m just wondering if this is “good enough” to check the patch isn’t likely to cause problems.
  • @pbearne: Got an offer from Tugboat for previews of core patches here; will bring up in dev chat and get more info

Help wanted

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

Performance team meeting summary 8 March 2022

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

Focus group updates

Announcements

@mxbclang

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” in 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/.
  • @furi3r: https://github.com/WordPress/performance/pull/124 has been pending for awhile and can be merged

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

  • No updates

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Open Floor

  • @mitogh: Flagging #209 Consider auto-deleting head branches after PRs are merged if folks have opinions about the approach
    • @flixos90: Makes sense after we’ve protected the branches that shouldn’t get deleted (trunk and release/*
  • @josklever: Had an issue where some images couldn’t be loaded on my WP dashboard and it was caused by a widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. that was disabled in the screen options. It appears that all the widgets are loaded even if disabled. Would this be a performance improvement? Or is there a good reason to load resources for disabled widgets?
    • @adamsilverstein: Sounds like a core 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., but don’t see a Trac ticket for it
  • @lu: Are we considering converting animated GIFs to MP4, similar to https://github.com/GoogleForCreators/web-stories-wp/issues/7232? Recently had to do this as the animated GIF size was huge compared to compressed/optimized video.
    • @spacedmonkey: Agreed that there are massive performance and file size wins there, but in Web Stories we converted GIF to MP4 using JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. in browser, which unfortunately won’t work in many WP contexts
    • @adamsilverstein: Could potentially provide a browser-based approach in core if server support is lacking
    • @andronocean: Would be concerned about server resource usage with larger GIFs or budget hosts
    • @gagan0123: If sever support is lacking, someone will have to do it manually rather than by CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. or cron job
    • @spacedmonkey: We used an ffmpeg library which requires array buffering, which isn’t available in older browsers and requires isolation of the page, meaning that images and scripts could not be hotlinked
    • @swisspidy: It’s doable, but there could be conflicts
  • @westonruter: Opened #220 Add Site Health test for full page caching (advanced cache)

Help wanted

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

Performance team meeting summary 1 March 2022

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

NOTE: The initial 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, 1.0.0-beta.1, will take place on Monday, March 7, 2022, at 19:00 UTC. We will hold a release party chat in the #performance SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/. channel at that time and all are welcome! See the Infrastructure section below for more details on the release.

Focus group updates

Announcements

@mxbclang

  • Database optimization focus area
    • Want to reassess the interest for this as a focus group
    • Please re-vote on the focus group spreadsheet here by adding/removing your WP.org username from the groups that you want to work on in Column D, Contributors 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/ username
    • Please only enter your name on two or fewer groups. If you’ve already voted and want to revise, remove your name from other areas.
    • We’ll reassess focus groups based on updated votes next week

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” in Slack
  • @flixos90: https://github.com/WordPress/performance/pull/136 could use additional reviews as it’s planned for the initial release. @furi3r planning to review feedback this week.

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

  • No updates

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Open Floor

  • @flixos90: Had a conversation with @spacedmonkey about if we should have a rule that two people have to approve all PRs. Been assuming that we should be aiming for two people approving each PR, though not a hard and fast rule. Open to thoughts.
    • @gagan0123: Two pair of eyes are always better than one; speed impact is minimal but quality of code is significantly better
    • @spacedmonkey: If we can enforce this on GitHub, let’s go for it (with no self-reviews)
  • @mxbclang: Seeking feedback on new designs shared in Performance Lab: Branding #144

Help wanted

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

Performance team meeting summary 22 February 2022

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

Focus group updates

Announcements

@mxbclang

  • Database optimization focus area
    • Want to reassess the interest for this as a focus group
    • Please re-vote on the focus group spreadsheet here by adding/removing your WP.org username from the groups that you want to work on in Column D, Contributors 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/ username
    • Please only enter your name on two or fewer groups. If you’ve already voted and want to revise, remove your name from other areas.

Images

@adamsilverstein @mikeschroder

GitHub project

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

Feedback requested

Site Health

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” in 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/.
  • No updates

Feedback requested

Measurement

@wp-source @josephscott

GitHub project

Feedback requested

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/.

@aristath @sergiomdgomes

GitHub project

  • @sergiomdgomes: Continued discussion around embeds and how we could avoid the performance impact some of the larger ones, like YouTube, through façades or other approaches in the context of blocks; welcome thoughts and feedback

Feedback requested

Infrastructure

@flixos90

GitHub project

  • @eclarke1: Vote is still open for Prepare initial release #133 on whether we’re okay shipping the WebP module in its current version where it no longer generates JPEG images, or whether we only want to ship it once it generates both JPEG and WebP images as intended. Vote here and leave a comment on why you think we should/should not release as-is. Automate @since tags generation using the n.e.x.t placeholders #90 has been merged and @kirtan95 is working on Define default module activation (onboarding) #61 for 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. release.
  • @mitogh: Should we introduce composer and namespacing before the release to prevent naming conflicts? We do use prefix but it seems like a workaround and not a long-term solution.
    • @flixos90: No because that’s not established in core.
    • @mitogh: Agreed, but the majority of the code will change when transitioned into core anyway.
    • @flixos90: Yes, but will be easier to migrate and review if we stick to core conventions as much as possible.
  • @kirtan95: Need review on #177 Run phpcbf and phpcs before commit; @dainemawer will take a look.

Feedback requested

Open Floor

  • @pbearne: Suggest that we work on taking care of some low-hanging fruit outside of the main focus areas
    • @tweetythierry: A prioritization exercise of those items would be helpful
    • @flixos90: Always okay to bring those up here and ask for feedback, but be sure that we’re paying the most attention to focus area items to keep them moving, since we decided that they were the most important. Let’s be conscious of the performance impact, especially.
    • @adamsilverstein: One idea would be to run a bugbug A bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. scrub for existing TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. issues tagged with performance as an ongoing effort

Help wanted

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