日期:2014-05-17  浏览次数:20636 次

为什么freemarker比jsp慢?
本人昨天做了这样一个测试,测试环境为:struts2+freemarker+tomcat6
在action中声明两个方法,方法中其他的都一样,就是最后return不一样
配置为:
1)、<result name="test" type="freemarker">${templePath}/vote/tmp1_vote.ftl</result>
    很显然,这儿是struts2整合了freemarker
2)、getRequest().getRequestDispatcher(voteWrapper.getFilePath() + "/vote/tmp1_vote.jsp").forward(getRequest(), getResponse());
     return null;
    这个在action的方法中使用forward跳转。
然后使用linux中的ab测试工具进行测试,
./ab -n 10000 -c 100 "http://118.118.110.167:8181/test/jsp/baseMgnt\!initPage2.action?object.objectId=2717&object.typeId=1/"
./ab -n 10000 -c 100 "http://118.118.110.167:8181/test/jsp/baseMgnt\!initPage.action?object.objectId=2717&object.typeId=1/"
令人意外的事情发生了,测试出来的结果竟是:
第一次测试结果:
1)的tps为:7000
2)的tps为:14000
就等于说,jsp 的效率比freemarker快了整整一倍,这个与预想结果完全颠倒,不太清楚为什么了???
第二次,增加了并发数和请求数,测试结果两个都是14000,估计跟缓存有关系了
ftl和jsp中内容的区别:
jsp中使用el表达式
ftl中使用自带的标签
内容完全一样。

------解决方案--------------------
关注一下,remark
------解决方案--------------------
freemarker这东西..怎么说哪
我用下来,fm的优势在于可以自定义标签,如果是很多类似结构的页面的话,用fm可以节省大量的重复代码
但是,fm的解释速度的确不是很快,毕竟这东西实在太复杂了,相比jsp那种标签解释来说

然后,你测试的话...小声告诉你,其他你应该在jsp页面多用些struts2标签的,struts2标签是用fm写的
你直接用el表达式来写,jsp本身就没有执行多少操作,当然速度很快了

velocity没用过,就不发表评论了

不过说实话,即使稍微慢了一点,fm的总体性能还是值得肯定的,也不是慢的不能接受,是吧?~
------解决方案--------------------
FreeMarket静态化要自己写代码,就是一个CMS系统了,你到网上找个CMS系统就知道了
------解决方案--------------------
引用:
FreeMarket静态化要自己写代码,就是一个CMS系统了,你到网上找个CMS系统就知道了

= =!貌似那样比较费劲呢