2012-03-25 55 views
8

就像in this topic,在我的應用中添加枝條「render」標記時,我在dev模式下出現性能問題(相關文檔:Embedding controllers)。Symfony2和Twig渲染性能問題

如果沒有這個渲染標記,我的頁面會在不到70毫秒的時間內生成。 使用渲染標籤時,至少需要170 ms。 並且在應用程序中添加的每個渲染標記都會將頁面生成時間增加100 ms(這是A LOT:爲什麼常規頁面在60 ms內運行並且渲染標記在100 ms內?)。 我可能需要4或5我們的應用程序的每個頁面上,這意味着每個頁面至少500毫秒的開發模式。

我完全理解prod模式沒有問題,但顯然在開發過程中並不舒服。 那麼,有人知道任何方式來擺脫任何無用的調用,日誌或代碼,而在開發模式使用「渲染」標籤?

回答

8

我有explained它只是10小時前。長話短說:遷移到枝條擴展。

+2

那麼在這種情況下,爲控制器邏輯創建一個服務是更好的恕我直言。如果控制器邏輯具有數據庫操作,那麼我認爲最好不要將邏輯移動到枝功能。如果嵌入式控制器具有附加的路由並且可以獨立調用,則創建單獨的服務也可確保可用性。 – 2012-03-25 20:41:32

+0

沒有什麼能阻止你從枝條延伸的呼叫服務。事實上,這就是我所做的。這不是一個這個VS的問題。我的Twig擴展只是調用定義爲服務的控制器的動作。這些操作可以在沒有Twig擴展的情況下重用。 – 2012-03-25 20:52:45

+1

那麼這個服務也可以通過在'app/config.yml'中添加一個全局變量來暴露給樹枝。完成不同的事情。沒有什麼可以爭論的:)。 – 2012-03-25 21:04:22

8

symfony中我最喜歡的功能之一是渲染標籤,嵌入控制器調用。分析器爲每個控制器調用增加了很多開銷,不僅速度快,而且使用了大量內存。你有幾個選項來加速它。

分析器默認將每個數據寫入sqlite數據庫。 IIRC sqlite不允許並行插入,因此每個請求都必須等待輪到他們訪問數據庫以刷新數據收集器。您可以使用您的開發數據庫(MySQL或任何您使用的)來保存探查器數據。一年前,我在速度方面獲得了很多。

您也可以禁用子請求的分析器,或者只在發生異常時使用分析器。詳細信息請參見the framework config reference

# config_dev.yaml 
framework: 
    profiler: 
     only_exceptions:  false 
     only_master_requests: false 
     dsn:     sqlite:%kernel.cache_dir%/profiler.db 
+0

我有prbl使用render_esi();在這種情況下,@ m2mdas解決方案是不可行的。 – lrkwz 2015-11-11 13:24:53

+0

這確實是一個有趣的技巧:-) – MauganRa 2016-08-31 10:33:36

2

選擇取決於您的應用程序。我認爲最實用的方法是:

1)對重渲染模板使用render標記,並使用hinclude庫以異步方式加載它們。當每個要呈現的模板本身「慢」(例如,許多數據庫連接,大文本等)時,這是非常有用的。

2)按照m2mdas的提議進行。這是常見情況下非常快速的解決方案。