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
Merged

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

@wilsonge wilsonge commented Nov 16, 2014

Can we keep Registry instead of JRegistry please?

@Hackwar
Copy link
Member Author

@Hackwar Hackwar commented Nov 16, 2014

sure

@Fedik
Copy link
Contributor

@Fedik 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 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 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

@roland-d roland-d commented Nov 18, 2014

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
1 check passed
1 check passed
continuous-integration/travis-ci The Travis CI build passed
Details
@Hackwar Hackwar deleted the Hackwar:componenttable branch Nov 22, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

7 participants