wp-rocket icon indicating copy to clipboard operation
wp-rocket copied to clipboard

Improvements for Definition class to improve performance and reduce High CPU usage

Open joejoe04 opened this issue 1 year ago • 1 comments

We have received some suggestions about how the Definitions class can be altered to improve the plugin's performance and potentially decrease CPU usage. Specific details can be found here: https://secure.helpscout.net/conversation/2490895571/471075/#thread-7472405567

Here is the full content of the suggested changes:

In the last weeks I have been running some performance tests and I noticed some points inside WP Rockets code. After some light alterations i could archive a speedup of about 300 to 500 milliseconds.

Since this contact form is surely not the place to paste entire chunks of sourcecode, I'll try to outline what I've done with the least amount of code as possible.

In the "Definition" class add a simple method getTags() to "return array_keys($this->tags)".

In the "DefinitionAggregate" add two new properties "aliases" and "tags" and fill them inside "__construct()" and "add()" like this:

  • $this->aliases[$definition->getAlias()] = true;
  • foreach ($definition->getTags() as $tag) {$this->tags[$tag] = true;} this will allow removing the costly foreach from "has()" and "hasTag()" and just replace it with:
  • return isset($this->aliases[$id]); or
  • return isset($this->tags[$tag]); respectivly

It would also be possible to speed up "getDefinition()" as well by changing the $this->definitions to use the alias as index key and setting it as well inside "__construct()" and "add()" like this:

  • $this->definitions[$definition->getAlias()] = $definition; But since this will also remove any definitions with the same alias I'm not sure if this wouldn't break any of the plugins functionality.

Additional context https://secure.helpscout.net/conversation/2490895571/471075/ - Ticket https://wp-media.slack.com/archives/C43T1AYMQ/p1706280695093479 - Slack Discussion

Acceptance Criteria (for WP Media team use only) Clear instructions for developers, to be added before the grooming

joejoe04 avatar Jan 26 '24 16:01 joejoe04

Pinging you here too @MathieuLamiot

Do you think it's worth checking or doing R&D?

piotrbak avatar Jun 28 '24 15:06 piotrbak

Yes it is, however this is not something we should change in our plugin but in a dependency. We would need to share this report with PHP League container maintainers. I am adding this to the cooldown.

MathieuLamiot avatar Jul 03 '24 06:07 MathieuLamiot