Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Symfony2和细枝渲染性能问题_Performance_Symfony_Render_Twig - Fatal编程技术网

Performance Symfony2和细枝渲染性能问题

Performance Symfony2和细枝渲染性能问题,performance,symfony,render,twig,Performance,Symfony,Render,Twig,就像,在我的应用程序中添加一个小树枝“render”标记时,我在开发模式下遇到了性能问题(相关文档:) 如果没有此呈现标记,我的页面将在不到70毫秒的时间内生成。 使用render标记,它至少需要170毫秒。 应用程序中添加的每个渲染标记都会将页面生成速度提高100毫秒(这是一个很大的问题:为什么一个普通页面在60毫秒内运行,而一个渲染标记在100毫秒内运行?)。 我可能需要在我的应用程序的每个页面上安装4到5个,这意味着在开发模式下,每个页面至少需要500毫秒 我完全理解prod模式没有问题,

就像,在我的应用程序中添加一个小树枝“render”标记时,我在开发模式下遇到了性能问题(相关文档:)

如果没有此呈现标记,我的页面将在不到70毫秒的时间内生成。 使用render标记,它至少需要170毫秒。 应用程序中添加的每个渲染标记都会将页面生成速度提高100毫秒(这是一个很大的问题:为什么一个普通页面在60毫秒内运行,而一个渲染标记在100毫秒内运行?)。 我可能需要在我的应用程序的每个页面上安装4到5个,这意味着在开发模式下,每个页面至少需要500毫秒

我完全理解prod模式没有问题,但在开发中显然不舒服。
那么,在开发模式下使用“render”标记时,有人知道如何摆脱任何无用的调用、日志或代码吗?

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


有关说明,请参阅。

我10小时前才拿到。长话短说:迁移到细枝扩展。

symfony中我最喜欢的功能之一是render标记,即嵌入控制器调用。不过,探查器为每个控制器调用增加了大量开销,不仅提高了速度,而且占用了大量内存。你有几个选择来加速它

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

您还可以为子请求禁用探查器,或者仅在发生异常时使用探查器。有关详细信息,请参阅

\config\u dev.yaml
框架:
探查器:
只有例外:false
仅\u主\u请求:false
dsn:sqlite:%kernel.cache\u dir%/profiler.db

选择取决于您的应用程序。我相信最实际的方法是:

1) 对重渲染模板使用
render
标记,并使用库以异步方式加载它们。当要呈现的每个模板本身“缓慢”(例如许多数据库连接、大文本等)时,这非常有用


2) 按照…的建议去做。对于常见的情况,这是一个非常快速的解决方案。

我也会按照Elnur的建议使用树枝扩展。另一种选择是使用奏鸣曲块束:。Sonata块的子请求开销约为7毫秒afair。

在这种情况下,为控制器逻辑创建服务更好。如果控制器逻辑有db操作,那么我认为最好不要将逻辑移到twig函数。如果嵌入式控制器连接了路由并且可以独立调用,那么创建单独的服务也可以确保可用性。没有任何东西可以阻止您从细枝扩展调用服务。事实上,我就是这么做的。这不是一个这个对那个的问题。我的分支扩展只调用定义为服务的控制器的操作。这些操作在没有Twig扩展的情况下是可重用的。通过在
app/config.yml
中添加Twig全局变量,也可以向Twig公开服务。只是完成事情的不同方式。实际上没什么好争论的:)。所以我们应该避免在Symfony2中嵌入控制器?这是相当令人失望的,因为这个机制非常有用并且易于使用…如何用细枝扩展替换渲染?我使用Render_esi()创建了prbl;在这种情况下@m2mdas解决方案是不可行的。在yml文件中,您将使用什么字符串来代替MySQL数据库?