Richfaces性能优化
1. rich:modalPanel标签的使用问题
发现问题:我们的页面使用rich:modalPanel比较多,而rich:modalPanel里面都加载了一些数据及渲染了一些标签,即使在没有显示的情况下,这些数据也会加载且标准也会渲染出来,这也是导致页面加载过慢的原因之一。
解决方案:当rich:modalPanel不显示的时候,我们可不渲染这些标签以及不加载数据来提升页面的显示速度,我们可把rich:modalPanel里面的内容单独做个页面片段,当rich:modalPanel显示的时候,我们执行一个JS脚本去临时加载页面片段的数据,然后回写到rich:modalPanel中。
2. rich:dataTable的预加载问题
发现问题:数据列表的展示rich:dataTable是我们常用的标签,而性能不是很满意,因为rich:dataTable存在预加载的问题,也就是说在同一表单内发生任何ajax的request都会导致rich:dataTable预加载数据(就是重新从数据库查询一次数据,然后把数据组装到dataModel中),这种机制严重导致了列表页面的显示速度
解决方案一:我们可使用h:dataTable来替换rich:dataTable,尽量少使用rich:dataTable,h:dataTable不会预加载数据,性能比较可观
解决方案二:我们可重写rich:dataTable标签的实现机制,去掉预加载数据,但不知道会不会引起一些问题,现在还没想明白rich:dataTable为什么要预加载数据。
3. 对于编辑,增加,显示是跳转到新页面的分开比较好
比如我们有个列表A.xhtml页面,点击其中的编辑或显示连接,跳转到B.xhtml页面,此页面加载了一些数据和标签,也判断了是编辑或显示,可能其中有一些数据只是用于编辑,而不是用于显示,但同样也加载了,会导致性能问题,如果我们把编辑页面和显示页面单独分开,这样我们在编辑页面就只加载需要的数据和标签,在显示页面也只加载需要的数据和标签,这样也简化了页面标签的结构。
对于编辑、增加、显示在同一页面的,不需要这样做,因为用ajax局部刷新了
4. Richfaces解析器
Richfaces内置了几种解析器,TIDY解析器用于复杂的或非标准的标记,这些标记由过滤器做严格效验并更正,NEKO过滤器在解析代码没有严格效验,大大加快了ajax请求的处理,但使用时要确保应用程序标记是严格用于这个过滤器,否则可能会导致很多错误和恶化布局结果
所以说TIDY解析器相对NEKO解析器来说会慢很多,默认是TIDY解析器
<context-param>
<param-name>org.ajax4jsf.xmlparser.NEKO</param-name>
<param-value>NEKO</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
<param-value>.*\..*</param-value>
</context-param>
需要加入nekohtml.jar(http://sourceforge.net/projects/nekohtml/)
5. 强制容器在发送到客户端之前压缩所有的Richfaces资源,包括图片、样式表、JavaScript等。它将大大的减少页面的加载时间。
<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>
注意:org.richfaces.LoadScriptStrategy参数让richfaces生成的页面里引用到所有js和css,并且是合并压缩过的版 本。因已经是压缩过的了,不需要再让org.ajax4jsf.COMPRESS_SCRIPT再压缩了
6. 通过设置forceparser、forcenotrf设置为false来最小化过滤和强制解析任何jsf页面的html语法检查器
<filter>
<filter-name>richfaces</filter-name>
<display-name>RichFaces Filter</display-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>forceparser</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>forcenotrf</param-name>
<param-value>false</param-value>
</init-param>
</filter>
7. JSF优化技巧将保证所有和Richfaces相关的JavaScript、文件、库等在第一次请求到达时被下载到客户端,并且压缩JS和
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>all</param-value>
</context-param>
8. JSF Richfaces优化将启用Richfaces组件的缓存,并将组件缓存到客户端来提高应用的性能
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>enable-cache</param-name>
<param-value>true</param-value>
</init-param>
</filter>