2010-06-23 59 views
4

我爲我的web應用程序使用StringTemplate作爲視圖圖層。最近我測量了渲染頁面花費了多少時間,簡單頁面大約需要50ms,複雜頁面大約需要500ms。這對我的需求太多了,所以我正在尋找一種方法來提高ST的表現。我怎樣才能做到這一點?爲什麼StringTemplate可能會很慢?

大部分時間是由StringTemplate.toString方法消耗掉,所以它不是一個緩存問題。

我積極利用匿名模板和包含的模板 - 可這是原因?

+0

不是緩存問題?如果你緩存了結果字符串呢? – 2010-06-23 15:40:49

+0

這就是我打算做的暫時解決問題,但我更喜歡快速瀏覽引擎來緩存。 – Fixpoint 2010-06-23 17:13:40

+0

@Fixpoint:你可以發佈你正在用來測試ST的源代碼嗎? – 2012-03-22 12:09:02

回答

4

使用write()不toString然後寫入您的流。 write()將呈現並傳輸w/o緩衝。巨大差距。 Ter

+0

你能澄清嗎?目前我這樣做:'response.getWriter()。print(template);' – Fixpoint 2010-06-23 17:12:37

+0

我試過'template.write(new AutoIndentWriter(response.getWriter()));' - 幾乎沒有改進。 – Fixpoint 2010-06-24 13:33:52

+0

真的嗎?對於大型模板有巨大差異的Java版本。 – 2010-07-01 23:06:47

1

特倫斯帕爾?

我認爲特倫斯意思是

template.write(new AutoIndentWriter(response.getWriter())); 

但我不能beieve,這將使任何明顯的差異。

你應該時刻兩件事情分開

String str = template.toString(); // 1 
response.getWriter().print(str); // 2 

緩慢可能是基於涉及IO二號線。

+1

我剛剛測量(1)和(2)。不幸的是,問題出現在'toString'中; 'print'只需要很少的時間。 – Fixpoint 2010-06-24 13:28:58

1

如果使用toString()內存是要大。

檢查你的記憶時toString()情況下運行負載測試。

如果你的記憶力夠了。兩種情況是同一時間。