2010-06-23 61 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()情况下运行负载测试。

如果你的记忆力够了。两种情况是同一时间。