[!!!][TASK] Replace ClassInfo with ClassSchema
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Documentation / Changelog / master / Feature-57594-OptimizeReflectionServiceCacheHandling.rst
1 .. include:: ../../Includes.txt
2
3 ===========================================================
4 Feature: #57594 - Optimize ReflectionService Cache handling
5 ===========================================================
6
7 See :issue:`57594`
8
9 Description
10 ===========
11
12 Since its beginnings, Extbase came along with two main caches for reflection data,
13 `extbase_reflection` and `extbase_object`. The latter mostly stored information that were relevant
14 to the dependency injection, like inject methods, inject properties and constructor parameters. The
15 information was gathered by actual reflection and by analysing doc blocks of properties and methods.
16
17 `extbase_reflection` stored similar reflection and doc block data about objects but mainly for the
18 parts outside dependency injection.
19
20 For example, the validation resolver used it to identify `@validate` tags, the ActionController used
21 it to identity which properties not to validate. The ORM also used it a lot to find annotated types
22 via `@var`.
23
24 There were a few issues with these two approaches:
25
26 * A lot of redundant data was fetched
27
28 * Data was fetched multiple times at different locations
29
30 * The `extbase_reflection` cache was stored each plugin separately, resulting in a lot of redundant
31 cache data for each plugin cache
32
33 * At a lot of places, the reflection service was used to reflect objects, but the data wasn't cached
34 or taken from a cache resulting in performance drawbacks
35
36
37 Impact
38 ======
39
40 * The `extbase_object` cache has been removed completely and all necessary information about objects,
41 mainly `@inject` functionality, is now fetched from the `ReflectionService` as well.
42
43 * The `ReflectionService` does still create `ClassSchema` instances but these were improved a lot.
44 All necessary information is now gathered during the instantiation of ClassSchema instances. This
45 means that all necessary data is fetched once and then it can be used everywhere making any further
46 reflection superfluous.
47
48 * As runtime reflection has been removed completely, along with it several reflection classes, that
49 analyzed doc blocks, have been removed as well. These are no longer necessary.
50
51 * The `extbase_reflection` cache is no longer plugin based and will no longer be stored in the
52 database in the first place. Serialized `ClassSchema` instances will be stored in `typo3temp/var/Cache`.
53
54 .. index:: PHP-API