[TYPO3-core] TCA, ext_tables.php and caching concept
Christian Kuhn
lolli at schwarzbu.ch
Mon Feb 11 00:14:10 CET 2013
Hey.
First I'd like to thank Benni for his trust expressed with his latest
mail in the thread!
I didn't expect such a shitstorm in the '30% slower' thread and it was
my fault to not give a bigger overview of current work and ideas prior
to pushing and merging the patch in question.
We raised the topic at the extbase code sprint and realised we must give
out more details on strategic things the active development group is
working on, and the vision we share.
When refactoring bigger things, it is often not really clear how the
final version will look like. We realised the TCA handling must be
improved to gain speed and to make things easier for developers at the
same time. With the first patches we got rid of some constructs that
blocked us from doing things. Two weeks later, we now have a group of
people aware of the full impact and the system oddities.
Our current concept boils down to:
* loadTCA(), includeTca() are deprecated, not used in core.
* Move all $TCA (ctrl+columns) of a specific table to
ext:Configuration/TCA/'tablename'.php
* Deprecate ['ctrl']['dynamicConfigFile']
* First transparent cache level: Change bootstrap: On first access
(caches empty), before loading ext_tables: Find all loaded extensions,
find files in their Configuration/TCA folders, execute them (they will
return an array with TCA config, filename is the tablename). This will
build 'main' TCA. Cache the full result for next operation (cache_core).
This operation will be done in all scopes (fe, be, ...). ext_tables.php
*should* not include 'ctrl' sections of tables anymore, but they *can*,
for compat reasons.
* In FE, caches cleared: Additionally to above, call all ext_tables, get
result of full TCA and export to cache_core. Will be required on next
call. This way, we have a *full* TCA in the frontend in all scopes,
while not executing ext_tables on every call. ext_tables is not executed
(like before) if this TCA cache entry exists.
* In BE: Use the 'Configuration/TCA' cache above, but always include
ext_tables.php anyway (like before).
We are confident this scheme will work out pretty well and gives
backwards compatibility.
* The Configuration/TCA cache entry can be used every time in the
backend, ext_tables.php will be smaller and takes less time to execute.
A pre-compiled TCA array takes (nearly) zero time if loaded from disk
with opcode cache.
* In frontend, full TCA will always be there, loaded in (nearly) zero
time, just using some MB more memory, no DB call. Memory impact of some
megabytes is ok.
* Transparent caching, no need for any developer to think about this
sort of things if TCA files are located at the correct position.
* The ugly 'dynamicConfigFile' construct is gone.
All in all we think that both frontend and backend performance will
increase with this concept. Next patches to move TCA around will follow
soon and after that the cache layers will be integrated. The whole thing
is *must have* for 6.1, otherwise we will do some sort of roll-back.
Regards
Christian
More information about the TYPO3-team-core
mailing list