Symfony4:禁用您很少使用的服务

Symfony4: disabling services that you rarely use

似乎所有 symfony 服务总是 __constructed,即使您不使用它们。对吗?

如果您在 symfony 中有很少使用的服务,例如只使用一次的导入服务,这不会影响每次调用的负载吗?是否有一种标准方法可以在不再需要时禁用它们?

一般来说,当一个服务不被使用时(因为它需要被注入到一个服务或其他东西中)它的构造函数不会被调用:

When you ask for the MessageGenerator service, the container constructs a new MessageGenerator object and returns it (see sidebar below). But if you never ask for the service, it’s never constructed: saving memory and speed. As a bonus, the MessageGenerator service is only created once: the same instance is returned each time you ask for it.

source: https://symfony.com/doc/4.4/service_container.html

您可以通过代理更轻松地管理服务。那就是当您 return 一个包装器而不是实际 returning 服务时,它只在调用包装服务的某些方法时调用包装服务的构造函数。然而,这需要一些额外的设置,请参阅 https://symfony.com/doc/4.4/service_container/lazy_services.html

因此,本质上:您不需要禁用服务,因为除非您有需要它的活动代码,否则不会创建它们。如果你有很多 heavy 服务在某处使用,你可能需要延迟加载,如果服务被注入但仍未使用。