Symfony2和Twig会导致性能问题

Nan*_*com 8 performance render symfony twig

就像在本主题中一样,在我的应用程序中添加twig"render"标记时,我在开发模式下遇到性能问题(相关文档:嵌入控制器).

如果没有此渲染标记,我的页面将在不到70毫秒的时间内生成.使用渲染标记,它至少为170毫秒.并且在应用程序中添加的每个渲染标记都会使页面生成增加100毫秒(这很多:为什么普通页面在60毫秒内运行,渲染标记在100毫秒内运行?).我可能在我的应用程序的每个页面上需要4或5个,因此这意味着在开发模式下每个页面至少需要500毫秒.

我完全理解产品模式没有问题,但在开发中显然不太舒服.那么,在开发模式下使用"render"标签时,是否有人知道如何摆脱任何无用的调用,日志或代码?

Bár*_*más 9

symfony中我最喜欢的一个功能是渲染标记,嵌入控制器调用.分析器为每个控制器调用增加了很多开销,不仅速度快,而且占用大量内存.你有几个选择来加快它.

默认情况下,探查器将每个数据写入sqlite数据库.IIRC sqlite不允许并行插入,因此每个请求都必须等待轮到他们访问db来刷新数据收集器.您可以使用开发db(mysql或其他任何用途)来保存探查器数据.一年前,我在速度方面获得了很多.

您还可以为子请求禁用探查器,或仅在发生异常时使用探查器.有关完整详细信息,请参阅框架配置参考.

# config_dev.yaml
framework:
    profiler:
        only_exceptions:      false
        only_master_requests: false
        dsn:                  sqlite:%kernel.cache_dir%/profiler.db
Run Code Online (Sandbox Code Playgroud)


Eln*_*mov 8

我在10个小时前解释过它.长话短说:迁移到Twig扩展.

  • 那么我们应该简单地避免在Symfony2中嵌入控制器?只要这种机制非常有用且易于使用,这是非常令人失望的...... (4认同)
  • 那么在这种情况下,为控制器逻辑创建服务是更好的恕我直言.如果控制器逻辑有db操作,那么我认为最好不要将逻辑移动到twig函数.如果嵌入式控制器已连接路由并且可以单独调用,则创建单独的服务还可确保可重用性. (2认同)

Mun*_*Das 6

您可以将控制器逻辑移动到服务并将其作为twig全局变量引用,然后包含控制器呈现的模板.

有关说明,请参阅/sf/answers/927219611/.