A service injected into a controller is constructed on every request that hits it, including the requests that never call it — and for an expensive constructor that is a cost on every page.
services:
AppReportHeavyGenerator:
lazy: true
# the consumer receives a proxy; the real object is built on
# first method call. requires symfony/proxy-manager-bridge.
Laziness is worth reaching for when the constructor opens a connection, reads a file or builds a large structure, and it is pure overhead otherwise — a proxy is a generated class and an extra indirection on every call. The better answer is frequently a factory or a smaller service, and laziness is what to use when the dependency belongs to a library you do not control. debug:container reports which services are lazy, which is the audit.