2015-09-16 49 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 –