2010-02-25 104 views
9

我們使用Apache Velocity作爲網站模板,其中一些變得越來越複雜。您是否注意到某些Velocity功能存在任何性能問題?你是如何解決它們的?Apache速度性能陷阱?

+4

如果您有疑問,請對其進行配置。用剖析器。無需猜測。 – skaffman 2010-03-01 00:56:03

回答

6

人們經常忽視的最重要的功能是資源加載器緩存(默認關閉),這會提高性能(file.resource.loader.cache)。

#parse指令也有明顯的性能影響,試圖使用它只是爲了避免代碼重複,而不是將模板分割成邏輯部分。

如果您的模板在邏輯上變得相當複雜,也許可以將該邏輯轉移到控制器並提供一個準備呈現數據結構的模板。

我沒有注意到Velocity有任何性能下降,當我在從JSP切換之前測試Velocity速度時,它們在我投向它們的任何模板上速度都快了50%。目前,我們使用Velocity模板生成數千頁網頁,並且閃電般快速,對性能非常滿意。

+0

將調用移動到每次在循環外產生相同值的Java代碼也可以提高性能。這似乎有助於我的情況。 Java的Hotspot編譯器爲Java代碼執行此操作 - 我不確定此功能是否存在於Velocity引擎中。 – 2014-11-19 16:16:55

10

首先使用最新的速度庫(1.7或1.6.4)。 版本1.5包含一些嚴重的性能問題!

而且,這裏是你必須在生產環境調整參數列表:

  1. velocimacro.library.autoreload - 應設置爲
  2. file.resource。 loader.cache - 應設置爲true
  3. fi le.resource.loader.modificationCheckInterval - 應設置爲-1
  4. parser.pool.size應該增加,如果缺省值不夠大(默認值是20)
2

我們嘗試在ASTText節點中緩存byte[]以避免對輸出文本進行太多次編碼。

+0

+1您是否來自淘寶網? – 2011-08-15 08:03:36

+0

你能否提供更多細節你是如何做到的? – 2011-08-15 08:08:32

+0

我想我已經知道你是如何做到的。謝謝〜!但是你爲什麼說它會將輸出文本編碼太多次。我不明白。 – 2011-08-15 08:59:27