performance - Symfony4:禁用您很少使用的服务
问题描述
似乎所有 symfony 服务总是__constructed,即使你不使用它们。是对的吗 ?
如果您在 symfony 中有很少使用的服务,例如只使用一次的导入服务,这不会影响每次调用的负载吗?是否有在不再需要时禁用它们的标准方法?
解决方案
通常,当不使用服务时(因为它需要注入服务或其他东西),它的构造函数不会被调用:
当您请求 MessageGenerator 服务时,容器会构造一个新的 MessageGenerator 对象并将其返回(参见下面的侧边栏)。但如果你从不要求服务,它就永远不会被构建:节省内存和速度。作为奖励,MessageGenerator 服务只创建一次:每次请求时都会返回相同的实例。
您甚至可以通过代理更懒惰地管理服务。那是当您返回一个包装器而不是实际返回服务时,该包装器仅在调用某个方法时才调用包装服务的构造函数。但是,这需要一些额外的设置,请参阅https://symfony.com/doc/4.4/service_container/lazy_services.html
因此,基本上:您不需要禁用服务,因为除非您有需要它的活动代码,否则它们不会被创建。如果您有很多在某处使用的繁重服务,您可能需要延迟加载,如果服务已注入但仍未使用。
推荐阅读
- javascript - 使用两个条件从对象数组中过滤数据
- entity-framework - 多个存储库中属性总和的最佳实践
- django - UserProfile django中的外键问题
- python - python中营销分析中的特征工程
- python - 在脚本之外操作 Nextflow 变量
- python - QTableView 中的相等拉伸列
- django - django uwsgi - “没有名为‘项目’的模块”
- java - SAX Parser:如何在 java 中获取 XML 的根元素而不显式给出根名称?
- scala - 为以逗号分隔的字符串列值添加双引号并以逗号分隔写入 CSV 文件
- javascript - 从数据库获取节点和链接后端口未设置