The fifth layer of the TYPO3 performance onion is about the number of installed extensions and the the TYPO3 CMS installation itself. Learn how to gain more performance by using only the most necessary extensions and the latest TYPO3 core.
Remove unused extensions
On the one hand, it is easy to install the one or the other extension while developing and testing a website. This makes it also easy to forget to remove these extensions, if they are not needed any more. Even if they do not harm the functionality of the website, they will have negative impact on the performance.
An extreme example is a customer, who contacted us at in2code having performance issues. After some analysis, we removed 36 (!!) mostly custom developed extensions without any negative impact on the content of the website … and the performance issues were gone.
Install only necessary system extensions
Until version 7 TYPO3 came with a large set of pre-activated system extensions. These were already reduced in version 8. Using a composer based installation, it is now possible to fine grain all installed and activated system extensions further more. The magic word is “subtree split”. Until a couple of months ago, it was only possible to install TYPO3 core with all system extensions (even if they were not activated). The subtree spilt makes it possible to deliver and install only these system extension, which are really needed for an installation.
A “minimal” package is available at https://packagist.org/packages/typo3/minimal, but you can also add the sub-packages individually to your project.
Use newest TYPO3 version
Each new major TYPO3 version brought performance improvements. TYPO3 6.2 featured the caching of the TCA. Everything moved from ext_tables.php
to Configuration/TCA/
profited of the TCA caching. If your extensions still have TCA related code in ext_tables.php
, you should really consider to move it to the (not so) new location.
TYPO3 7LTS introduced the caching of fluid viewhelpers. If a viewhelper implements the \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
it takes advantage of the caching. Markus Klein provides some more insights on this topic in his post Fluid Compilable – Speed it up.
In TYPO3 8 the major performance improvement is due to the php version requirement. The minimum php version was raised to 7.0 and this version brings a built-in opcache, which provides pre-compiled php code to speed up the whole application.
Use newest TYPO3 version ??
Your objection might be: “I cannot keep every project up to date with the last version”. Yes, this is true. This is why the TYPO3 roadmap is designed to be able to skip every second version. Nevertheless it is helpful to keep up to date with all the changes. A summary of all changes is published by the TYPO3 core team at https://docs.typo3.org/typo3cms/extensions/core/latest/.
But I can also recommend to start with a TYPO3 sprint release, if a launch is planned around the release of the next TYPO3 LTS release. This may make some pain while developing, but has several benefits:
- you stay up to date with latest TYPO3 developments
- you can provide feedback to the TYPO3 project
- it saves your customer one update cycle
Some of the savings of the update cycle are necessary for adapting the breaking changes coming from the new version. At in2code, we did that with a larger project for 8LTS … and we will do it again: The pain is worth it :-)
Conclusion
Having some kind of minimalism regarding extensions is really helpful, if you care about (TYPO3) performance. Also if you stay up to date with the latest TYPO3 release, you will profit from performance enhancements.
Credits
I want to thank my supporters via patreon.com, who make this blog post possible. Already 27 fellows and companies support me on a regular basis writing this blog.
If you appreciate my blog and want to support me, you can also say “Thank You!”. Find out all the possibilities here:
I found the blog post image on pixabay . It was published by jingoba under the CC0 public domain license. It was modified by myself using pablo on buffer.