Performance team meeting summary 27 September 2022

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

Announcements

Focus group updates

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

N/A

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

  • @aristath: No movement on the JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. front recently, so focusing on general performance improvements instead, including #56636#56637#56654 and just a few minutes ago #56666. The process I’ve been following is to basically run vanilla WP using Xdebug-profiling, examine the results using webgrind and try to reduce the amount of function calls – as well as their cost. Generally small tweaks, with relatively big benefits. Last week #55005 was also merged in CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., so overall I believe WP 6.1 contains a lot of nice and impactful performance changes – as highlighted by all the updates from other folks above.

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Discussion: SQLite support

@spacedmonkey and @aristath

  • @spacedmonkey: Think this is a great idea and could be useful in core for running unit tests and for other projects like wordpress-wasm. Wonder if the performance team should help take on this problem, even if it is to review the solution and ensure that there’s no 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..
  • @aristath: Understand that testing could be difficult, so currently converting it to work as a 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 this repository. Trying to convert to something that would make sense for core and then publish in the .org repo as a featured plugin. Hoping if this is in the form of the plugin, more people will test and provide feedback. Also noting that the initial proposal focused on small-to-medium sites, but there’s great potential for growth in other areas as well where large sites can take advantage of SQLite.
    • @spacedmonkey: I’ve forked hyperdb and run very large multisites, can provide context here
    • @aristath: We’ll need lots of context once we get rolling – the prospect of pairing SQLite and hyperdb is very exciting

Our next chat will be held on Tuesday, October 4, 2022 at 11am EDT in the #core-performance channel in Slack.

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

#meta

Performance Chat Agenda: 27 September 2022

Here is the agenda for this week’s performance team meeting scheduled for September 27, 2022, 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

Performance team meeting summary 20 September 2022

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

Announcements

Focus group updates

Images

@adamsilverstein @mikeschroder

GitHub project

  • @adamsilverstein: WebP feature was reverted following Matt’s post. Still trying to determine what a 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 is and if it would work for WebP by default. Still have some fixes to land for 6.1 around image quality when WebPs are output via Performance Lab plugin.
  • @spacedmonkey: Next steps for Dominant color feature
    • We’ve run out of time to merge before BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1 cutoff
    • Feedback process was a lot slower than we thought it would be
    • Should continue to work on this and try to get it in for 6.2
    • @pbearne: Version with theme flag could be merged
    • @spacedmonkey: Merging now doesn’t feel great as there are still unanswered questions. Code is ready, but not sure what feedback will push this across the line. May need to push early in 6.2 cycle and see what happens.
    • @flixos90: Feels like another merge proposal post with a concrete timeline on a merge date could be good to put out right after 6.1, so people can provide any additional feedback. Should also note the new theme support flag approach.

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/.
  • @shetheliving: #56040 and #56041 (two Site Health checks from Performance Lab) have been merged for 6.1 and dev notes are in progress
  • @mukesh27: PR #543 for adding can-load.php to these Health Checks is ready for review

Feedback requested

Measurement

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or ping in Slack
  • @shetheliving: Reminder about the performance testing environment work started back in March: https://make.wordpress.org/core/2022/03/22/performance-team-meeting-summary-22-march-2022/. This has stalled out since then; if anyone is interested in picking it back up, let us know.
  • @flixos90: Working on a proposal to integrate the Server Timing API into Performance Lab. We have a lack of awareness for how WP is performing server-side and this simple piece of infrastructure would allow us to measure specific features/modules of the plugin to see who they are affecting PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher performance. Should an open an issue this week or next.
  • @mehulkaklotar: Continuing to work on a proposal for the plugin performance checker tool

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

  • N/A

Feedback requested

Infrastructure

@flixos90

GitHub project

Feedback requested

Discussion: Module proposal: Optimized autoloaded options

@markjaquith

  • Options are autoloaded by default, and most options stay autoloaded even after the plugin or theme that uses them has been deactivated
  • This autoloading has a cost in terms of the performance of the query that loads autoloaded options, and also because the values of these options are kept in memory
  • Discussed a lot of ways of addressing this at WordCampWordCamp WordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what they’ve learned throughout the year and share the joy. Learn more. US, and the most promising path that would have the most benefit for the most users (and fits in with this group’s philosophy on focusing on automated fixes instead of introducing new APIs) is to dynamically move options in and out of the “autoload” pool based on usage
  • Options that are used *and* are not past a certain size cutoff should be autoloaded, but large options and options that are not used, should not be autoloaded
  • Proof of concept is linked in the ticketticket Created for both bug reports and feature development on the bug tracker. and we’re looking for additional feedback
  • @pbearne already brought up the issue of options that are queried BEFORE a module could start “listening” for them to be called, but there are undoubtedly other gotchas and opportunities here
  • Especially useful would be help in developing a strategy for measuring the performance of this fix for various sizes of autoloaded options
    • @flixos90: Could leverage the Server Timing 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. (noted above) to measure the time the autoloaded options query takes, for example
  • @pbearne: Think that both @markjaquith‘s and my fixes can be used as they work best for different configurations
  • @spacedmonkey: Could we start adding a limit to the number of autoloaded options, say 250 rows? Or is the issue size in terms of memory?
    • @pbearne: If we can load just what we need, the SQL time is less
    • @markjaquith: We do this to avoid hundreds of individual queries
  • @rickjames: Is “autoloading” the thing that PHP can do for include files? I thought it was so slow as to be better to always include everything
    • @markjaquith: No, this is about quering the wp_options table for autoload = 'yes'
  • @rickjames: That gets to the lack of adequate indexes for the wp_options table; a simple change can speed up SELECTs
    • @markjaquith: There’s already an index, it’s more about the volume of data being transferred
  • @eugenemanuilov: Think we should move from defining which option is autoload-able in the database table to the option registration in WP, so a plugin/theme owner will need to register an option similarly to how settings are registered with register_setting and define whether an option is autoload-able there
  • @flixos90: Both proposals at a high level have the idea of querying what is needed, but the newer proposal does it globally while still keeping a single place of storage while the latter was aimed at having different “options lists” per template/page. The latter would be great, but it comes with heavy storage implications, so the newer proposal is probably the best place to start since it has no additional storage implications.
  • @markjaquith: Do think that the issue is data, not rows – evicting autoloaded options could help wtih both
  • @rmccue: Have run into performance problems with pulling autoloaded options from object cache, so agreed that this is an issue
  • @markjaquith: Also issue with memcache’s default config being size-limited
  • @spacedmonkey: Could we use register_settings to define if an option should be autoloaded?
  • @rmccue: CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. problem is that autoload is true by default, which is what causes issues
  • @markjaquith: Two approaches – @pbearne optimized for “literally just what this page needs”; my POC was for “never autoload things that aren’t used”
  • @spacedmonkey: So will we store an array of used options in options table?
    • @markjaquith: Current implementation only stores timestamp of last calibration, but with some additional storage we could minimize dynamic re-adding of autoloaded options
  • @rmccue: Autoloading options should minimize DB/cache calls, but not necessarily replace them. The heuristic of what should be autoloaded is key to this proposal.
    • @markjaquith: To me, it’s “things that are used and aren’t unreasonably large.” Can also honor autoload='no' while not honoring autoload='yes' as chosen by developers.
  • @spacedmonkey: Don’t love the idea of storing an array of keys. How do you generate the array? What is the average page load?
  • @rmccue: To move forward, we need a concrete proposal for how the heuristic works. Will look into the networknetwork (versus site, blog) saturation problems we’ve run into get an idea of what “unreasonable” might lok like.
  • Next steps: @markjaquith will work on detailing the heuristic further in #526 and when it’s ready, we’ll schedule another discussion for a future chat

Our next chat will be held on Tuesday, September 27, 2022 at 11am EDT in the #core-performance channel in Slack.

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

#meta

Performance Chat Agenda: 20 September 2022

Here is the agenda for this week’s performance team meeting scheduled for September 20, 2022, 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

Performance team meeting summary 13 September 2022

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

Announcements

Focus group updates

Images

@adamsilverstein @mikeschroder

GitHub project

  • @adamsilverstein: In the last week the image team finished addressing the WebP feedback and switching back to the original single mime output approach. We also started work on controlling output per size and adding support to add_image_size.
  • @adamsilverstein: Yesterday during contributor dayContributor Day Contributor Days are standalone days, frequently held before or after WordCamps but they can also happen at any time. They are events where people get together to work on various areas of https://make.wordpress.org/ There are many teams that people can participate in, each with a different focus. https://2017.us.wordcamp.org/contributor-day/ https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/. at WCUS, Matt posted on (not shipping) WebP in 6.1 which was a surprise to the team. We are currently working with the release leads to better understand his concerns and develop a path forward. I want to acknowledge this is a blow for everyone who worked on the feature (myself included) and at the same time I’d like to encourage us to focus on how we can move forward given the current position. Are there concerns we can address? Does a 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 make sense?
    • @spacedmonkey: I think it makes sense to move the webp functionality found in the performance plugin to it’s own plugin. That way it will be easier to get users to test it and get feedback on just this functionality.
    • @flixos90: I think if it remains a “feature project”, it makes sense to remain in the Performance Lab plugin – we don’t know if moving it out of it would get us more testers (especially since the Performance Lab plugin has 10k+ installs which is a lot for 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.). If the path of a “canonical plugin” should be pursued, then of course we would need to take it out, but then the nature of the project would also change.
    • @kadamwhite: Speaking from REST experience, the times we flirted with making add-on plugins to test specific routes, they never got the traction the main plugin did.
    • @adamsilverstein: My main concern about a feature like WebP being in a canonical plugin is how users would know they should enable it.
      • @eatingrules: FWIW, millions of users are finding and installing image optimization plugins in the repo. Smush has over 1 million installs. EWWW Image Optimizer has 1+ million. Imagify has 600k. Shortpixel, 300k. WebP Express, 200k. Robin image optimizer, 100k.
    • @kadamwhite: Something I remember coming up when we initially introduced responsive images was server / cdn costs, because certain configuration could cause higher-res versions to be downloaded. Does WebP’s size benefit translate to any hosting benefit?, in terms of money?
      • @adamsilverstein: with the current implementation yes! lower storage requirements since WebPs are smaller, and lower bandwidth requirements as well, though slightly more processor effort to generate
    • @flixos90: I think this discussion is very valuable, however we won’t be able to make any decision here today since we’re still waiting for more information. Hopefully we’ll know more by next week. We definitely need to continue this discussion once we do.
  • @pbearne worked on https://github.com/WordPress/performance/pull/528 to add a fetchpriority module to the Performance Lab plugin; will be a co-owner of the module
  • @wpgurudev has been working through the feedback and comments on background job class for image regeneration: https://github.com/WordPress/performance/pull/507, this is again up for review; next PR for review will be background process runner https://github.com/WordPress/performance/pull/512, this makes use of job instance, so will be reviewed and merged post the above PR merge

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

  • @spacedmonkey got 3 commits into coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. ([54080], [54098], [54099]) and worked on PR #3178
  • @kadamwhite: We’ve been doing some work on sites with very high comment volume around understanding the comment caching in core, because we began to actually see bottlenecks in cache performance with churn from comment cache eviction. Is anybody in this group specifically knowledgable about how WP handles comment caching?

Feedback requested

Site Health

N/A

GitHub project

  • @spacedmonkey: @furi3r has updated draft for new cache Site Health checks dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include: a description of the change; the decision that led to this change a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase., ready for another review

Feedback requested

Measurement

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/.
  • @mehulkaklotar is working on proposal for Plugin Check plugin. Right now, we would include minimal checks in the plugin that is included in the wporg-code-analysis and check the error log for any warnings, notices when plugin activated. I would love to hear suggestions about GithubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ action that we will provide as an action that developers can use into their plugin repo.

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

  • @mukesh27 worked on JavaScript coding standard workflow #515. Please review and share feedback.

Feedback requested

Infrastructure

@flixos90

GitHub project

  • N/A

Feedback requested

Open Floor

  • @spacedmonkey: Next steps for Dominant color feature (continued from last week)
    • @pbearne: Are we all happy to merge the theme flag version?
    • @flixos90: I think there were still some open questions and research to do on the perceived performance improvement
    • @spacedmonkey: What are those questions? It comes down to the fact, we can’t move the performance benefit when it comes to metrics. But the benefit is more about what the users sees. That benefit is not an easy one to prove with numbers. It is more like a feeling of speed.
    • @flixos90: Agreed, it’s certainly more challenging to prove anything regarding perceived performance. I don’t know but there is research on how “good” the LQIP perceived performance benefit is – so at least in theory there is something to unpack there for the dominant color perceived performance benefit as well. Maybe it’s a bit of a stretch to have us to UXUX User experience research around that, which may be the only thing we could do in terms of research. At this point, I’m not opposed to it landing in core, but I’m also not sold on it.
    • @spacedmonkey: I consider dominant color like other 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. data we generate, so why not this? It could be helpful for theme developers.

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

#performance, #performance-chat, #summary

Let’s make WordPress officially support SQLite

WordPress can be (and is) used for any kind of site, regardless of size or complexity. Some common use-cases include:

  • Single-page landing sites
  • Simple company sites with just a few pages. These sites are usually rarely updated and are essentially static sites with an administration aspect.
  • Simple, single-user blogs
  • Complex news sites
  • e-Commerce sites
  • Full-fledged CMS solutions

Part of the success of WordPress is because it is extendable, hookable, and can be used and tweaked to accomplish almost any task on the web.

However, one aspect of WordPress has never changed, regardless of the increase in WP’s use cases and popularity: The database. WordPress requires 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 to be installed on a site. MySQL is arguably only optimal for some of the scenarios: The “mid-tier” range of site types.

Large sites usually implement custom database stacks depending on their specific needs, so are beyond the scope of this proposal.

On the lower end of the spectrum, there are small and simple sites. These are numerous and consist of all the blogs, company pages, and sites that don’t have thousands of users or thousands of posts, etc. These websites don’t always need the complexities of a MySQL/MariaDB database. The requirement of a dedicated MySQL server increases their hosting cost and the complexity of installation. On lower-end servers, it also decreases performance since the same “box” needs to cater to both a PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 5.6.20 or higher and a MySQL/MariaDB server.

The ideal scenario

Ideally, WordPress would allow us to choose the type of database during installation. That could be done using an installation guide, or a simple constant in wp-config.php. To accomplish that, WordPress would need to have a database-abstraction layer. This is not an innovative or radical idea in the CMS space; Drupal has had a solid database-abstraction layer for more than a decade. Laravel, Symfony, and others also include ORMs that allow using multiple database types.

Building a database abstraction layer for WordPress would be a colossal task – though it might be one that, at some point in the future, we may have to undertake to ensure the project’s continued evolution and longevity.

A middle ground

As a middle ground, we could implement a solution for the bottom tier: small to medium sites and blogs. These sites don’t necessarily need a full-fledged MySQL database.

SQLite seems to be the perfect fit:

  • It is the most widely used database worldwide
  • It is cross-platform and can run on any device
  • It is included by default on all PHP installations (unless explicitly disabled)
  • WordPress’s minimum requirements would be a simple PHP server, without the need for a separate database server. 
  • SQLite support enables lower hosting costs, decreases energy consumption, and lowers performance costs on lower-end servers.

Implementing SQLite in WordPress CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress.

Using SQLite in WordPress is, at this point, simple; There are implementations out there that have been around and evolving for more than 8 years. They have been thoroughly tested and proved to work seamlessly. These implementations are drop-in wp-content/db.php files that users can add to their installation; they are not hard to use. 

However, most people are not aware of them. They are not aware that they have the option to buy cheaper hosting sans-mysql and then install WordPress using an SQLite database. Nor should they have to know about it… After all, they just want a simple company site or a blogblog (versus network, site)

WordPress could officially support SQLite by including one of the existing SQLite implementations in Core. We would need to ensure that it is properly tested and supported, and additionally, raise awareness and expose the option to users.

Why should this be in Core and not a 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

Picking a database type is something that should happen when a site is first installed. It is not something that should be done after the fact because that would require migrating data from one database to another, which can often be complex. 

WordPress includes the MySQL implementation in Core, so if we support SQLite then that implementation should live alongside it. 

Data migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. can (and should) be in a plugin to facilitate migrations for existing sites should they wish to do that, but the database engine itself belongs in Core. 

That will ensure that the implementation is properly supported, properly tested, and WordPress will be able to benefit, as detailed in the following section.

What would the benefits of SQLite be?

Officially supporting SQLite in WordPress could have many benefits. Some notable ones would include:

  • Increased performance on lower-end servers and environments.
  • Potential for WordPress growth in markets where we did not have access due to the system’s requirements.
  • Potential for growth in the hosting market using installation “scenarios”.
  • Reduced energy consumption – increased sustainability for the WordPress project.
  • Further WordPress’s mission to “democratize publishing” for everyone.
  • Easier to contribute to WordPress – download the files and run the built-in PHP server without any other setup required.
  • Easier to use automated tests suite.
  • Sites can be “portable” and self-contained.

Next steps

The next steps would need to be discussed in the comments section of this proposal. If there is consensus to implement SQLite in WordPress Core, an outline of the next steps would look something like this:

  • Create the necessary TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets
  • Decide how the database type would be defined. The most simple scenario would be a DATABASE_TYPE constant in wp-config.php, allowing users to choose if their new site would use a MySQL or SQLite database, but there can be other solutions that come up during a later discussion.
  • Port an SQLite implementation to WordPress Core, applying the necessary changes like coding standards, in-code documentation, migrate tests, etc.
  • Test WordPress Core functionality with SQLite
  • Outreach to plugin developers for testing.

The subject of database abstractions and using SQLite was discussed at length during WCEU 2022, in an unofficial capacity, in the hallways. This post is a distilled culmination of these conversations to bring the discussion to the broader community for serious consideration.

Props @zieladam, @mamaduka, @jonoaldersonwp, @tweetythierry, @SergeyBiryukov, @joostdevalk, @dingo_d, @desmith, @crixu, @williampatton, @costdev, @adamsilverstein, @JavierCasares, @robinwpdeveloper, @aaemnnosttv, @jessibelle for reviewing and contributing to this proposal.

#database, #install, #performance, #sustainability

Performance Chat Agenda: 13 September 2022

Here is the agenda for next week’s performance team meeting scheduled for September 13, 2022, 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

Performance team meeting summary 6 September 2022

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

Announcements

Focus group updates

Images

@adamsilverstein @mikeschroder

GitHub project

  • @adamsilverstein: The image team has been focused on addressing feedback on the WebP work and have prepped two follow up commits that address these concerns.
    • https://github.com/WordPress/wordpress-develop/pull/3161 reverts all of the multi-mime changes. Note for contributors to this work who might be disappointed to see it reverted: multi-mime work may return in a future release once we can land async media generation.  Even though we aren’t gonna use the approach now, exploring it was important to arriving at the current approach with confidence.
      • This has since been committed in [54085].
    • https://github.com/adamsilverstein/wordpress-develop-fork/pull/35/ introduces the WebP output mapping. It includes some new tests as well as fixing an existing 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. and addressing possible generated file naming conflicts.
      • This has since been committed in [54086].
  • @joegrainger: Working on Regenerate existing images GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ issues #479 and #480
  • @mukesh27: Working on CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets #16502, #55227, #37114
  • @wpgurudev: Background job taxonomy PR has been merged; follow up PRs #507 and #512 are ready for review
  • @flixos90: Reminder about the fetchpriority module which is still looking for an owner. This module was already approved for inclusion in 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, and it’s a great opportunity to get started with owning a module – a “good first module” so to speak.

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

  • @spacedmonkey: Committed [54080]
    • @flixos90: would be curious whether this networknetwork (versus site, blog) options 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. change has actual performance benefits. It’s certainly great from an API perspective to have that better aligned, but since we’re speaking about performance here, I don’t think we really know how that is going to be impacted
    • @spacedmonkey: It reduces the number of queries a lot; it also means if a network option does not exist in the database, it does result in another query (with Jetpack installed, 3 less queries per page just from missed network options); To be sure, performance is not the only reason do this. It removed a lot of code and add benefits, like register_meta, default values, new filters etc.
    • @flixos90: Totally makes sense. If you could support that with some benchmarks for the dev notedev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include: a description of the change; the decision that led to this change a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. that would be great and also justify it more from a performance perspective
  • @spacedmonkey: Core PRs #3178 and #2995 are ready for review

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/.
  • @flixos90: Site Health check for full page cache was merged last week in [54043]
    • There were some follow up quirks to address with some test issues related to some environment edge cases, but those have all been addressed shortly after (see #56041 for more details)

Feedback requested

Measurement

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or ping in Slack
  • @mehulkaklotar: working on proposal for Plugin Check plugin, getting ready for reviews from the team

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

  • @flixos90: Performance Lab plugin PR #468 needs reviews from people experienced with JavaScript tooling, WebPack etc.
  • @flixos90: Plugin PRs #388 and #510 were completed last week, which are some great little fixes

Feedback requested

Open Floor

  • @pbearne: Dominant Color proposal feedback discussion and next steps
    • @pbearne: The feeling is that this is good idea and we would want it, but the theme should control turning it on; the code to store the dominant color values on image upload into the image 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. should run regardless (e.g. that data could also be used in the media library in core)
      • We would hide the dominant color for the front-end behind a theme support flag like add_theme_support( 'dominant-color' );
      • This approach can be seen in core PR #3164
      • @flixos90: I think it makes sense to have the CSSCSS Cascading Style Sheets. aspect of it controlled by themes. However there is considerable other feedback on the post which focuses on the performance aspect of this feature
    • @flixos90: IMO we should center the conversation around that first, as there was some concern on the post what the real performance impact is (whether it’s perceived or “actual” performance); FWIW I don’t think the single lab test that was conducted and posted on the GitHub issue serves as a meaningful indicator for performance. PageSpeed Insights lab test results vary greatly, even between runs of the same page, so the fact that it was slightly better in one run doesn’t mean anything – which is a shame really, but that’s the case
      • @spacedmonkey: I am not sure I agree with your judgement on this one
      • @flixos90: We would need to do much larger scale tests across a variety of sites to assess a performance impact. Metrics like bytes throughput, database queries etc. are stable, but for things like CWV they vary greatly between each run; If you run let’s say 10 tests, each time before, the other time after, and it’s consistently better with the feature, then there may be something to it. But a single PSI test doesn’t mean anything in terms of CWV and dynamic metrics like FCP, TTFB etc., that’s unfortunately the truth
      • @spacedmonkey: But this change has never been about actual performance improvements, perceived performance was always the goal. Could you spend sometime profiling performance further for us and see what results you get?
        • A follow up analysis with more sample data sets has since been conducted, indicating there is no clear performance impact from the feature, so we probably need to focus on perceived performance indeed
    • @adamsilverstein: the discussion on the ticketticket Created for both bug reports and feature development on the bug tracker. centers around perceived performance: based on the approach, I doubt there is much actual performance benefit as measured in the lab. Maybe one thing that is missing from the proposal or the comment thread replies is research/data around the benefits background color provides for perceived load time. Part of the issue may be a lack of prior research?
      • @adamsilverstein: the original idea was a bit different (low quality image placeholders, not dominant color) and had even more tradeoffs/cost to use. the commonality is they help users have a sense of what is going to fill an image space before the image loads
      • @flixos90: I think that’s what is a potential problem here: Most articles that we’ve dug up so far focus on perceived performance of regular images with LQIP. But what we’re doing now is “less” than LQIP, so it’s further away from looking like the final image. I know there were technical complexities that make us chose that path, but I think we need to consider that
      • @spacedmonkey: Dominate color has other benefits and can also be used in styling, contrasting overlays / text for example
      • @adamsilverstein: lack of existing research may be because dominant color is relatively unique/new approach? were there existing examples of it we looked at? maybe we need to conduct some research?
        • @spacedmonkey: Unsplash uses blurhash and fallback to dominant color, Google Images also uses dominant color
      • @masteradhoc: I feel like the way that Google uses it for images is really a good way and can improve the visible speed for the user. I would support to have this into core. Frontend is controlled by themes and wp-adminadmin (and super admin) by default looks quite a good way for me
    • @pbearne: Do we feel that adding dominant color to the media library what a good improvement in itself (e.g. as an improvement to wp-admin)?
      • @adamsilverstein: might be worth bringing up at a media meeting, I like the idea but have some concerns: how would library look with only some images having dominant color generated? is it worth the effort of generating the color on upload only for the media library?
      • @flixos90: a potential concern is that this runs additional processing on image upload. I don’t know how much it impacts upload, and whether it does increase the chance to time out or run into memory limit, but that is quite sensitive. Especially at this point as we are just going to revert the multi MIME image generation for exactly that reason; I think starting with the media library may be a good approach if this additional processing is not a concern
      • @pbearne: it’s actually quite lite on upload compared to the rest of processing

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

#performance, #performance-chat, #summary

Performance Chat Agenda: 6 September 2022

Here is the agenda for next week’s performance team meeting scheduled for September 6, 2022, 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

Performance team meeting summary 30 August 2022

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

Announcements

  • @flixos90: multiple announcements
    • Team Rep nominations reminder
    • If you are contributing to the WordPress/performance GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged be the repository owner. https://github.com/ repository (or any WordPress GitHub repository FWIW), please link your 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 GitHub accounts if you haven’t done so. You can do so at https://profiles.wordpress.org/profile/profile/edit/group/1/
    • If you have been contributing to the team’s efforts (e.g. GitHub, discussions, conversations in this chat, …) but don’t have the “Performance Contributor” badge on your profile, you may request to have it added by requesting to join the group at https://profiles.wordpress.org/associations/performance-contributor/
    • If you are contributing to the WordPress/performance GitHub repository, please be aware of a new rule to avoid naming your regular temporary coding branches something like feature/. That feature/ prefix will be reserved for special protected feature branches going forward
      • @adamsilverstein: other than the ‘feature/’ prefix, are there any other conventions we want to follow / is that documented somewhere?
      • @flixos90: Only feature/ and release/ must not be used for regular coding branches (a pull request to document this has since been opened)

Focus group updates

Images

@adamsilverstein @mikeschroder

GitHub project

  • @adamsilverstein: we have been working on responding to feedback on the WebP ticketticket Created for both bug reports and feature development on the bug tracker. (#55443) and conducting research around the potential usefulness of a “threshold” size above which jpegs would be generated instead of WebPs.  The research used WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ to run many images through WordPress image compression with WebP quality set at 82, 84 & 86 to investigate how often WebP images are larger than the JPEG equivalent, at what image dimensions, and by how much. I will be summarizing the research in my response on the ticket shortly
    • there seems to be strong agreement that we should only output a single mime type. The main question now is if the mult-mime support is worth keeping – the code adds a good bit of complexity to media, and isn’t strictly required for the approach we are considering now… so we are trying to weigh the pros and cons of keeping it. It might make sense to revert and re-introduce when we have support for async media generation (something we are already working on)
  • @joegrainger: Working on creating sub-issues with implementation details for Regenerate existing images and coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. 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. for Update core functions to support multiple mime types
  • @mukesh27: Working on WebP core follow-up patch https://github.com/WordPress/wordpress-develop/pull/3036 and Core TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. ticket with performance focus
  • @wpgurudev: Basic regenerate-existing-images module PR has been merged, follow-up PR for background job 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. up for final review; background job class PR is ready, waiting for taxonomy PR to get merged, so that tests can be added
  • @pbearne: Dominant color is getting pushback; would like to suggest that we put it behind a theme feature flag (show-dominant-color) and we add it to the media library in wp-adminadmin (and super admin)
    • @flixos90: We should evaluate that pushback closely. Can you elaborate why it should be controlled by the theme instead?
    • @pbearne: The push back seems to have the theme of “we like this but themes should control the look and feel”
    • @flixos90: So it would mean the data is still added to every image upload, but the theme decides how to use that color information? Sounds reasonable
    • @flixos90: discussing this further will be made a dedicated agenda item next week

Feedback requested

Object Cache

@tillkruess @spacedmonkey

GitHub project

  • @tillkruess: focus had one core merge last week (see PR / changeset), with great results already (see chart from wordpress.org below, shared by @dd32)
MySQL throughput dropping from roughly 1.5M to pretty much half following the commit

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: persistent object cache Site Health PR was merged (see changeset / ticket), what is left for the full page cache PR (see ticket)?
    • @flixos90: haven’t re-reviewed it yet since last week, but if all the feedback from then has been addressed and the merge conflicts are fixed, this should be good to go
  • @furi3r: can try to get a Draft for the dev notesdev note Each important change in WordPress Core is documented in a developers note, (usually called dev note). Good dev notes generally include: a description of the change; the decision that led to this change a description of how developers are supposed to work with that change. Dev notes are published on Make/Core blog during the beta phase of WordPress release cycle. Publishing dev notes is particularly important when plugin/theme authors and WordPress developers need to be aware of those changes.In general, all dev notes are compiled into a Field Guide at the beginning of the release candidate phase. by next week, I’ll be on holiday after that, so maybe someone can take over if not ready/published

Feedback requested

Measurement

N/A

GitHub project

  • We’re seeking 1-2 POCs for this group; if you’re interested, please comment here or ping in Slack
  • @mehulkaklotar: working on proposal for PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party Check plugin

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

  • @pushpakpop: we have started research around the approach for the JavaScript orchestration project

Feedback requested

Infrastructure

@flixos90

GitHub project

  • @mukesh27: PR to fix unexpected input Warning message during release build/test process ready for re-review

Feedback requested

Open Floor

  • @olliejones: Database Performance Health Checks module proposal (continued from last week)
    • @olliejones: Is DBMS server performance part of the mission of this group?
      • @flixos90: Absolutely! Every aspect of performance is relevant to the team’s mission
    • @olliejones revised this health-check module proposal to simplify the output (see https://github.com/WordPress/performance/issues/475 and please look at the “Other” section), agrees with last week’s conversation about excess complexity; we’ll do all the checks and only report the trouble spots
      • @flixos90: In that case I’d argue there is still a lot of complexity. Implementing each of these tests in a reliable way is probably not trivial. To clarify, I’m not saying we shouldn’t do it. I’m only suggesting we start with only one of them for the first version and add the others in additional iterations
      • @olliejones: FWIW I have a prototype I’ve been testing against old versions of DBMS software as well as new versions. The tests were designed to cope with missing RDBMS features in the old versions. Yeah, complex, for sure. But doable.
    • @flixos90: Does anybody have objections against this module proposal?
      • Quick survey of thumbs up / thumbs down resulted in 9 thumbs up and 0 thumbs down
      • @olliejones will start a pull request introducing the module; if it shows that some bits there are too complex to get through in a reasonable time, we can still re-assess if we want to narrow down the scope

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

#performance, #performance-chat, #summary