performance optimization for a typo3...
TRANSCRIPT
Performance optimization for a TYPO3 website
Alexandre Gravel-Raymond, Web [email protected]
Aliénor.net : Bordeaux based Web agency
Plan
I – TYPO3 presentation
II - Performance and limits of standard rendering
III - Solutions
Multilingual, multidomain websites
Workflows
Powerful user rights management
Great importance given to retro-compatibility
More than 4000 extensions on the TYPO3 Extension
Repository (TER)
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Enterprise level solution
Tree-based configuration langage (forming templates)
No functions (but references to PHP functions)
No variable (but the possibility to use a registry for information exchange between parts of the template)
Typoscript
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
End user: The website seems slow.
Sys admin: The server load can be important on complex
websites.
Criticism about TYPO3
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Performance and limits of standard rendering
Three main reflexion areas:
Code optimization: of course !
Make the application lighter: not at the expense of
flexibility !
Fine-grained cache : this is the way.
Solutions to the performance issues
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
TypoScript objects composing a template fits in two categories :
Cacheable objects (USER plugins, TEXT objects, Content Object Array - COA, etc.)Dynamic (non-cacheable) objects (USER_INT plugins, dynamic Content Object Array - COA_INT)
Standard cache
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Standard (cached) typoscript objects are renderedDynamic (_INT) typoscript objects are replaced by specially crafted tags (<!--INT_SCRIPT … >)The result is stored in the cache system (usally the database)A second rendering phase replaces the tags by the corresponding objects' HTML representationThe final document is sent to the user
When the requested page is not cached yet
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
The cached representation of the page is pulled from the cache systemTags representing dynamic objects are replaced by the objects' HTML representationThe final document is sent to the user
When the requested page is in cache
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Every request, including those concerning already
cached pages, force the web server to execute
TYPO3.
It is (very) resource-intensive
Limits of the cache system
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Solutions
Extension developed by Netcreators
Some benchmarks show a page delivery speed
multiplication by 230 !
Alternative solution : nc_staticfilecache
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Stores the final document in a static HTML file
This file (if it is present) is directly delivered by the web
server
PHP and TYPO3 are not loaded at all !
If the static cache is not found, the standard rendering
process is executed
nc_staticfilecache extension
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Follows standard TYPO3 cache rules (ex: if the cached version of a
page has expired, the corresponding static file is deleted
Possibility to extend static cache delivery rules in a .htaccess file :
Ex : Cookie identifying users that must have a dynamic version
of the website
Possibility to deactivate the static cache on a page-by-page basis
nc_staticfilecache advantages
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Apache and mod_rewrite are needed
Download and install the extension :
http://forge.typo3.org/projects/extension-nc_staticfilecache
Add basic rewrite rules given in the example .htaccess file
Add a cronjob that points to the script that cleans expired
static files (via scheduler)
Installing nc_staticfilecache
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
POST requests are excluded (to maintain the dynamic nature of the forms)All GET parameters must be rewritten on statically cached pages (with realurl or cooluri extensions)No page containing dynamic (_INT) objects will have static cacheOne solution to have a dynamic page : make the _INT object static, and use AJAX to render the « personalized » content (use with caution)
nc_staticfilecache constraints
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Use Nginx as a reverse proxy to deliver static files
(lighter and quicker than Apache)
Use eAccelerator or another PHP op-code cache
system to boost PHP performance for dynamic pages
and for the first hits of static pages
Architectural solutions
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
When the standard cache system doesn't help and nc_staticfilecache doesn't apply
Use an alternate cache systemMemcached is a « high-performance, distributed memory object caching system » that can help override bottlenecks in an application.Since TYPO3 4.3, you can define an alternate cache backend (file or memcached instead of database)
For dynamic plugins
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
CSS and JS fusion / minification tools (TYPO3 extensions)
scriptmerger: extensive configuration, possibility to exclude individual filesload_optimization: HTML compression, only files added via typoscript are processedjs_css_optimizer: uses the new page rendering API, fine-grained configuration file by fileMinify: easy to install and use
Further optimization : reduce the number of HTTP requests
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Good practices
Do not deactivate the cache ! When you have cache
problems, refrain from doing this :www.example.com/?no_cache=1
$GLOBALS[‘TSFE’]->set_no_cache() ;
config.no_cache = 1 (typoscript template)
« No cache » checkbox in backend in the page properties form
Good practice #1
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Adapt the cache duration to the projectEx: At least one day for a typical publication website
Make TYPO3 clear the cache of affected pages
automatically when neededIn page TSConfig : TCEMAIN.clearCacheCmd = 1,2,3
Good practice #2
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Audit the extensions you use
With the help of the community…
Good practice #3
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Uninstall unused extensions (they can load typoscript
or PHP), even if an autoloading mecanism was
introduced in TYPO3 4.3
Good practice #4
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Lessen the complexity of the typoscript templates
It is possible to accomplish very complex tasks in pure
typoscript, but sometimes it's more clear to encapsulate
the functionnality in a specialized PHP class, and you
get more speed at the same time.
Good practice #5
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
For parts of the website that don't need it, do not use the
full TYPO3 rendering mecanism
AJAX script can be externalized with the eID
method :www.example.com/index.php?eID=ajax_scriptOnly loads necessary parts of TYPO3 core
Do 404 error pages need to be dynamic ? Prefer the
standard ErrorDocument method.
Good practice #6
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Optimize SQL tables added by your extensions with
well chosen indices, notably if it was automatically
created with the Kickstarter
Good practice #7
I – TYPO3 presentationII - Performance and limits of standard rendering
III - Solutions
Some further reading
http://wiki.typo3.org/index.php/Performance_tuning
http://typo3.org/development/articles/testing-and-
tuning-typo3-performance/
http://techblog.evo.pl/en/evo_nginx_boost-extension/
http://www.typofree.org/article/archive/2009/august/
title/enabling-nc-staticfilecache-in-typo3-nginx/
http://typo3.org/development/articles/using-cache-
control-headers-in-typo3/