如何加速Symfony2中的模板渲染?

 西西为考研要拼命啦 发布于 2023-02-12 17:20

我有一个symfony2应用程序,可以渲染大约6000个数据库实体.

我优化了ORM(推进)查询,现在数据库请求非常快.剩下的是symfony控制器和twig模板渲染引擎.

有没有办法加快渲染速度(例如切换到php模板?)我可以获得比symfony探查器更详细的分析信息吗?

以下是剖析器数据的摘录.

symfony profiler截图

编辑:我使用xDebug描述了我的代码,发现生成对象非常昂贵.在PropelObjectFormater->getAllObjectsFromRow大多数情况下,从数据库行创建数千个PHP对象.

profiler_run_excerpt

图像显示占用计算时间的95%的分支,即~2.8秒.数据库检索需要约0.5秒,渲染时间约为1秒,格式化时间最长约为1.5秒.

我不确定包含PHP类的文件的长度会有什么影响,但是Propel生成了很多代码(我最复杂的实体基类有近10k行代码),所以这可能会减慢对象的创建速度.

我认为使用数组格式化器(因此绕过对象创建步骤)将是一个解决方案,但这有点违背了ORM的目的.

3 个回答
  • 听起来你需要使用PHP twig扩展,这是根据你的情况.

    来自docs:

    从现在开始,Twig将自动编译模板以利用C扩展.请注意,此扩展不替换PHP代码,但仅提供Twig_Template :: getAttribute()方法的优化版本.

    当我一年前为我的项目尝试时,我个人并没有得到任何明显的影响.如果您使用它,请分享您的经验.

    2023-02-12 17:23 回答
  • 6K的迭代是很多工作.

    想法#1:

    你能实现数据分页吗?这似乎非常合理......

    想法#2(厚客户端):

    实现一些JavaScript模板机制.然后你的控制器应该返回JSON,以便JS通过它并完全呈现它.

    即使在这种情况下,依靠浏览器的速度来快速做6K循环也是很多问题.您需要在两者之间实现暂停(例如,在每第150次迭代之后),因此浏览器不会进入非响应模式...

    2023-02-12 17:24 回答
  • 在生产模式下,Symfony2的Twig模板渲染实际上是使用缓存模板完成的,这意味着它一个PHP模板; 一个Twig模板编译成纯PHP代码.在开发模式下,它当然不会像这样缓存模板,而是每次都编译它.在这里,在文档中阅读更多相关信息.

    PHP需要花费一些时间来编译包含大量数据的页面,即使模板只是普通的PHP-HTML输入代码,往往性能最快.- 您可能希望查看正常的HTTP缓存,如Varnish,如果此页面不是每次都必须从数据库呈现的内容.

    至于剖析.像XDebug这样的东西可以让你获得比Symfony2内置的更详细的分析信息.

    2023-02-12 17:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有