Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimizing JComponentHelper::getComponent #5124

Merged
merged 2 commits into from
Nov 22, 2014

Conversation

Hackwar
Copy link
Member

@Hackwar Hackwar commented Nov 16, 2014

Joomla currently loads each and every component seperately when it tries to retrieve the parameters of a component for example. On a vanilla Joomla, that means at least an additional 7 queries per pageload. This PR combines those into one query against the extension table and caching all results of that. This means less load for the database, less (albeit neglectable) memory consumption for Joomla and slightly less execution time for the overall system. The effects on a test-system might not be big, but it will be an optimization for larger systems.

This PR has one downside: So far the protected methode load() retrieved the data and then created the params object of each component. With the change I could either generate the params object for all components up front, or delegate that step to the getComponent() method and do it on demand. I choose the later option. This means that the load() method has a slightly changed behavior, which could be called a break in backwards compatibility. Since load() would only be accessible from inside the JComponentHelper class or a class inheriting from it and I simply can't think of a reason to create such an inheriting class, this change seems acceptable. However, I'd like to hear other opinions on this.

Test instructions:

  1. Enable debug mode, notice the number of queries on a page, its execution time and memory consumption.
  2. Apply the change.
  3. Reload the page and see a reduced number of queries and slightly reduced numbers for execution time and memory consumption.

@wilsonge
Copy link
Contributor

Can we keep Registry instead of JRegistry please?

@Hackwar
Copy link
Member Author

Hackwar commented Nov 16, 2014

sure

@Fedik
Copy link
Member

Fedik commented Nov 17, 2014

test
works good for me.
on the Test Installation on the homepage: before patch was 51 query, and 44 - after.

@chmst
Copy link
Contributor

chmst commented Nov 17, 2014

test
3.3.7_dev, 64 db-queries before - 37 after the patch

This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/5124.

@chmst
Copy link
Contributor

chmst commented Nov 17, 2014

sry - multiple entries due to a pending browser

This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/5124.

@roland-d
Copy link
Contributor

Moving to RTC as we have 2 successful tests

This comment was created with the J!Tracker Application at issues.joomla.org/joomla-cms/5124.

@mbabker mbabker added this to the Joomla! 3.4.0 milestone Nov 22, 2014
mbabker added a commit that referenced this pull request Nov 22, 2014
Optimizing JComponentHelper::getComponent
@mbabker mbabker merged commit 45919f9 into joomla:staging Nov 22, 2014
@Hackwar Hackwar deleted the componenttable branch November 22, 2014 07:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants