首页 > 解决方案 > Symfony4:禁用您很少使用的服务

问题描述

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

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

标签: performanceserviceconstructorsymfony4

解决方案


通常,当不使用服务时(因为它需要注入服务或其他东西),它的构造函数不会被调用:

当您请求 MessageGenerator 服务时,容器会构造一个新的 MessageGenerator 对象并将其返回(参见下面的侧边栏)。但如果你从不要求服务,它就永远不会被构建:节省内存和速度。作为奖励,MessageGenerator 服务只创建一次:每次请求时都会返回相同的实例。

来源:https ://symfony.com/doc/4.4/service_container.html

您甚至可以通过代理更懒惰地管理服务。那是当您返回一个包装器而不是实际返回服务时,该包装器仅在调用某个方法时才调用包装服务的构造函数。但是,这需要一些额外的设置,请参阅https://symfony.com/doc/4.4/service_container/lazy_services.html

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


推荐阅读