2015-09-16 51 views
2

我编译了我的PHP/IIS(5.6.11,nts,x86)的分支C扩展,并成功激活它:我可以在phpinfo()中看到它。Twig:编译的C扩展性能

但是它在性能上绝对没有影响,无论是在开发还是生产模式下,我都收集了数百种Symfony2格式(使用Twig很多)。

什么是用例,还是还有别的事情要做?

+0

PHP是否会从文件的PHP扩展中加载Twig?你配置了这个吗? (这些都是天真的问题,我不知道这个问题) –

+0

根据http://twig.sensiolabs.org/doc/installation.html,“从现在开始,Twig将自动编译你的模板以利用C扩展,注意这个扩展并不能代替PHP代码,但只提供了Twig_Template :: getAttribute()方法的优化版本。“所以它应该是自动的 – Rolintocour

+0

我还发现getAttribute方法很慢,我重载了一些小部件的模板以避免使用此方法,并且硬编码了我需要的属性。所以我认为应该看到差异(例如,对于350个对象的列表,每个对象具有3个输入=> getAttributes被称为1050次,所以我应该看到轻微的影响) – Rolintocour

回答

2

启用C扩展后,您需要清除Symfony缓存以强制Twig重新编译所有模板。否则,优化后的版本将不会被使用。这是使Twig使用扩展名所需的唯一东西。但是,如果您渲染Symfony窗​​体,则主要瓶颈可能位于表单系统中,而不是位于Twig中对属性的访问中(Symfony表单主题对Twig系统使用的属性访问非常少,它会通过几乎所有必要的数据作为上下文中的变量)。

如果您遇到性能问题,正确的解决方案是分析您的代码以了解瓶颈的真实位置,从而告诉您可以优化哪些地方。 SensioLabs完成的一个免费工具是Blackfire,它非常易于使用(它不适用于在Windows上运行的服务器,所以它可能不适合你,因为你说你使用IIS)。还有其他可用的选择(例如XHProf)。

+1

注意在Twig的最新版本(自1.22.3开始)时,Twig在计算模板缓存密钥时考虑了C扩展的可用性,因此启用C扩展时缓存会自动失效 –

+1

请注意,Blackfire现在也适用于Windows –