锁定老帖子 主题:Resin3 JSP预编译实现
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||
---|---|---|
作者 | 正文 | |
发表时间:2012-07-20
最后修改:2012-07-20
Resin3 JSP预编译实现
一、 预编译需求 通过预先编译JSP ,而不是在线上编译,节省了线上编译时间,降低系统上线初期超高的 CPU 使用率,以及用户请求等待事件 默认方式,Resin3 提供了俩种预编译( http://www.caucho.com/resin-3.0/jsp/compile.xtp ),但在实际使用的时候,无论哪种方法,都只能编译部分 JSP ,导致优化很不明显,据运维的说,还发生了 log4j 日志无法输出的情况(这个我也很莫名其妙,至今不知道原因) 二、 预编译改善原理 幸好Resin 是公开源码的,通过分析预编译代码,其默认编译方式是每 64 个 jsp 文件为一组,好处是这样编译速度快,但如果其中有一个 jsp 没有编译通过 , 则这 64 个文件都奖编译失败。在我们系统中,有很多子 jsp ,如果一些 JSP 不幸与这些子 JSP 分在一组,则编译不通过。
目前解决办法是每组JSP 只包含一个 jJSP 文件。这样就能保证全部编译,但缺点是需要较长编译时间,在测试系统上大概需要 1 分钟才能编译好 200 多个 JSP 文件
代码如下:
核心代码就是 config.setMaxBatch(1); 另外 appDir 是 web 根目录, classDir 是 jsp 编译后的保存的目录,其实就是 ${appDir}/WEB-INF/work.
针对编译速度慢的情况,可以做如下调整 1 换到线上机器进行预编译,速度能提高 2 setMatBatch(2),能节约一半时间。但会有少数 JSP ( < 子 JSP 个数)无法预编译。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||
返回顶楼 | ||
发表时间:2012-07-23
感觉和javac差不多。tools.jar中的javac命令,可以一次编译一个,也可以一次编译所有文件。我实现一个增量class打包工具的时候,800个java文件,一次编译一个的时间大概是30-40分钟,而批量则是3分钟,虽然批量很快,但是一旦一个错误,所有都运行不了,后来不用sun的javac,而是用eclipse的javac,那么即使一个错误也不会影响其他。eclipse编译错误的java文件的原理,文件中出错的方法,直接由原来的代码变成throw new Error("编译错误描述")。
|
||
返回顶楼 | ||
发表时间:2012-07-24
线上如何使用eclpise的java编译呢?
|
||
返回顶楼 | ||
浏览 3716 次