diff --git a/dependency-injection/cs/configuration.texy b/dependency-injection/cs/configuration.texy index 0ae0adcd06..5ff6ad86f2 100644 --- a/dependency-injection/cs/configuration.texy +++ b/dependency-injection/cs/configuration.texy @@ -96,11 +96,25 @@ di: # typy parametrů, které nikdy neautowirovat excluded: ... # (string[]) + # povolit lazy vytváření služeb? + lazy: ... # (bool) výchozí je false + # třída, od které dědí DI kontejner parentClass: ... # (string) výchozí je Nette\DI\Container ``` +Lazy služby .{data-version:3.2.4} +--------------------------------- + +Nastavení `lazy: true` aktivuje lazy (odložené) vytváření služeb. To znamená, že služby nejsou skutečně vytvořeny v okamžiku, kdy si je vyžádáme z DI kontejneru, ale až ve chvíli jejich prvního použití. Což může zrychlit start aplikace a snížit paměťové nároky, protože se vytváří jen ty služby, které jsou v daném requestu skutečně potřeba. + +U konkrétní služby lze lazy vytváření [změnit|services#Lazy služby]. + +.[note] +Lazy objekty lze použít pouze pro uživatelské třídy, nikoliv pro interní PHP třídy. Vyžaduje PHP 8.4 nebo novější. + + Export metadat -------------- diff --git a/dependency-injection/cs/services.texy b/dependency-injection/cs/services.texy index 1a6d98c136..8bc1221de2 100644 --- a/dependency-injection/cs/services.texy +++ b/dependency-injection/cs/services.texy @@ -340,6 +340,24 @@ services: ``` +Lazy služby .{data-version:3.2.4} +================================= + +Lazy loading je technika, která odkládá vytvoření služby až do chvíle, kdy je skutečně potřeba. V globální konfiguraci lze [povolit lazy vytváření|configuration#Lazy služby] pro všechny služby najednou. Pro jednotlivé služby pak můžete toto chování přepsat: + +```neon +services: + foo: + create: Foo + lazy: false +``` + +Když je služba definovaná jako lazy, při jejím vyžádání z DI kontejneru dostaneme speciální zástupný objekt. Ten vypadá a chová se stejně jako skutečná služba, ale skutečná inicializace (volání konstruktoru a setupu) proběhne až při prvním volání jakékoliv její metody nebo property. + +.[note] +Lazy loading lze použít pouze pro uživatelské třídy, nikoliv pro interní PHP třídy. Vyžaduje PHP 8.4 nebo novější. + + Tagy ==== diff --git a/dependency-injection/en/configuration.texy b/dependency-injection/en/configuration.texy index baa5467cfb..ac234c4cf5 100644 --- a/dependency-injection/en/configuration.texy +++ b/dependency-injection/en/configuration.texy @@ -96,11 +96,25 @@ di: # parameter types that you never autowire excluded: ... # (string[]) + # enable lazy service creation? + lazy: ... # (bool) default is false + # the class from which the DI container inherits parentClass: ... # (string) defaults to Nette\DI\Container ``` +Lazy Services .{data-version:3.2.4} +----------------------------------- + +Setting `lazy: true` enables lazy (deferred) creation of services. This means that services are not actually created when requested from the DI container, but only upon their first usage. This can speed up application startup and reduce memory usage since only the services required for a specific request are created. + +For a specific service, lazy creation can be [adjusted |services#Lazy Services]. + +.[note] +Lazy objects can only be used for user-defined classes, not for internal PHP classes. It requires PHP 8.4 or newer. + + Metadata Export --------------- diff --git a/dependency-injection/en/services.texy b/dependency-injection/en/services.texy index d1f30a9613..caf810c771 100644 --- a/dependency-injection/en/services.texy +++ b/dependency-injection/en/services.texy @@ -340,6 +340,24 @@ services: ``` +Lazy Services .{data-version:3.2.4} +=================================== + +Lazy loading is a technique that delays the creation of a service until it is actually needed. You can enable [lazy service creation globally |configuration#Lazy Services] in the configuration for all services at once. For individual services, this behavior can be overridden: + +```neon +services: + foo: + create: Foo + lazy: false +``` + +When a service is defined as lazy, requesting it from the DI container will return a special proxy object. This proxy looks and behaves like the actual service, but the real initialization (constructor call and setup) will only occur upon the first invocation of any of its methods or properties. + +.[note] +Lazy loading can only be used for user-defined classes, not for internal PHP classes. It requires PHP 8.4 or newer. + + Tags ====