在使用seam或JSF时往往会跟Richfaces及ajax4jsf一起使用,利用richfaces优秀的组件使页面展现更丰富更多样化同时加快了开发的速度,但与此同时richfaces也给系统带来了不少的性能问题。
别的暂且不说,就拿展现页面来说,如果一个页面上使用了richfaces组件,把最后解析出来的页面的源代码保存下来,你会发现保存下来的页面源代码非常大而且有一大推看得似懂非懂的代码。可想而知页面加载的性能会有多糟糕。
幸好richfaces提供了很多配置来提高加载页面的性能和组件解析的性能。
首先来看一下脚本和样式的加载策略:
在3.1.3版本之前,RichFaces根据需要加载样式表和脚本。即如果在一个特定页面上需要它们,才加载文件。从RichFaces 3.1.3开始,是可以管理RichFaces脚本和样式表文件如何被加载到应用程序。
1、下面在你的web.xml文件中的声明,准许加载完整的样式表文件。该配置将保证所有和样式相关的文件在第一次访问Richfaces应用的请求到达时全部加载到客户端:
<context-param>
<param-name>org.richfaces.LoadStyleStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
完整的样式表包含用于所有加载的组件的样式。换肤功能仍然工作。
"DEFAULT"的值是一个典型的按需变量。
"NONE"停止加载任何样式。重新设置较早引入的纯皮肤的所有颜色和字体的参数为null。org.richfaces.LoadStyleStrategy的"NONE"值,意味着RichFaces的预定义样式不被使用。
2、下面在你的web.xml文件中的声明,准许加载完整的脚本文件。该配置将保证所有和Richfaces相关的JavaScript、文件、库等在第一次请求到达时被下载到客户端:
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
如果你在web.xml文件中没有声明org.richfaces.LoadScriptStrategy,它等价于:
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>DEFAULT</param-value>
</context-param>
还有一种可能值是"NONE"。你没有一个特殊原因使用它,除非你获得了一个最新的(或修改)脚本版本,并且希望手动包括它在页面头中。
3、强制容器在发送到客户端之前压缩所有的Richfaces资源,包括图片、样式表、JavaScript等。它将大大的减少页面的加载时间。配置如下:
<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>
过滤器配置:
richfaces使用了一个过滤器,用于根据ajax请求接收到的代码的更正。在“标准”JSF请求的情况下,浏览器独立地做更正。在ajax请求的情况下,为了防止布局被摧毁,需要使用过滤器,因为收到的代码可能不同与浏览器验证的代码,并且浏览器不能做任何更正。
下面是一个在你的应用程序的web.xml文件中设置过滤器的例子:
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
从RichFaces 3.2开始,过滤器的配置变得更灵活。它可以对相同的应用程序的不同的页面集合配置不同的过滤器。
可能的过滤器类型是:
1) TIDY —— TIDY过滤器基于TIDY解析器。这个过滤器推荐用于使用了复杂的或非标准的标记,当响应来自服务器时,当所有必要的代码由过滤器做更正时。
2) NEKO —— NEKO过滤器修正了前面的快速过滤器,并且基于NEKO解析器。在使用这个过滤器的情况下,代码没有被严格校验。使用它,你要确保你的应用程序标记是严格用于这个过滤器的。否则可能会导致很多错误和恶化布局结果。这个过滤器大大加快了Ajax请求的处理。
3) NONE —— 没有更正
一个配置例子,如下所示:
<context-param>
<param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
<param-value>NONE,NEKO,TIDY</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.xmlparser.NONE</param-name>
<param-value>/pages/performance\.xhtml,/pages/default.*\.xhtml</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.xmlparser.NEKO</param-name>
<param-value>/pages/repeat\.xhtml</param-value>
</context-param>
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
这个例子显示的ORDER参数,定义了用于页面代码更正的特殊过滤器类型的顺序。
首先,所有"NONE"类型指定给过滤器。然后,两个不同的页面集合被定义,相应地使用了两个过滤器类型(NONE和NEKO)。如果页面涉及第一个集合,如下定义它:
<param-value>/pages/performance\.xhtml,/pages/default.*\.xhtml</param-value>
没有更正,因为这个页面的过滤器类型被定义为"NONE"。如果页面不是出自于第一个集合,则设置"NEKO"类型。
如果页面涉及第二个集合,如下定义它:
<param-value>/pages/repeat\.xhtml</param-value>
那么"NEKO"类型被用于更正。如果没有涉及第二个集合,则为该过滤器设置为"TIDY"("TIDY"过滤器类型用于代码更正)。
根据上述过滤器和使用到的解析器我们可以在特定的情况下做些调整和优化:
1)启用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>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
2)richfaces内置了几个解析器,TIDY解析器用于复杂的或非标准的标记,这些标记由过滤器做严格效验并更正。NEKO过滤器在解析代码时没有严格效验,大大加快了ajax请求的处理,但使用时你要确保你的应用程序标记是严格用于这个过滤器,否则可能会导致很多错误和恶化布局结果。
所以TIDY解析器相对NEKO解析器来说会慢很多。默认是TIDY解析器。
配置NEKO过滤器的代码如下:(上面已经说了NEKO过滤器是基于NEKO解析器,过滤器配置为NEKO过滤器就等于选择了更高效的NEKO解析器)
<context-param>
<param-name>org.ajax4jsf.xmlparser.ORDER</param-name>
<param-value>NEKO</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.xmlparser.NEKO</param-name>
<param-value>.*\..*</param-value>
</context-param>
分享到:
相关推荐
RichFaces 性能优化 RichFaces 是一个基于 Java 的 Ajax 框架,用于构建富互联网应用程序。然而,在使用 RichFaces 时,开发者经常会遇到性能问题。本文将讨论 RichFaces 的性能优化方法,帮助开发者提高应用程序的...
6. **RichFaces性能优化策略**: - **压缩资源**:通过设置`<context-param>org.ajax4jsf.COMPRESS_SCRIPT</context-param>`为`true`,可以压缩所有发送到客户端的RichFaces资源,如图片、CSS和JavaScript,以缩短...
这一版本对3.2.0进行了优化和修复,旨在提高性能和稳定性,同时可能引入了新的特性和改进。 在标签中提到的“ajax”和“ajax4jsf”,它们是RichFaces实现AJAX功能的关键。AJAX技术允许Web应用在后台与服务器进行...
9. **性能优化**:由于RichFaces组件可能带来额外的客户端负担,理解如何优化组件渲染和AJAX请求是提高应用性能的关键。 10. **社区支持**:作为开源项目,RichFaces有一个活跃的社区,提供文档、教程、论坛支持,...
**五、性能优化** RichFaces 3.0.0在设计时就考虑了性能,但实际应用中仍需根据项目需求进行调整。这可能包括优化AJAX请求的频率、减少不必要的组件渲染、合理使用缓存等。 **六、社区与文档支持** RichFaces拥有...
它不仅包含了一系列的组件,如数据表、树形结构、日历、图表等,还提供了事件处理、皮肤定制以及性能优化等功能。 ### RichFaces 的主要特性 1. **AJAX 支持**:RichFaces 使用 A4J (Ajax for Java) 技术,允许...
性能优化与调试** - **Ajax优化**:通过设置Ajax响应缓存、延迟加载和事件合并来提升性能。 - **调试工具**:如RichFaces的Ajax Debug Console,可以帮助开发者识别和解决问题。 **7. 社区支持与资源** RichFaces...
- **Portlet支持:** 介绍了如何在Portlet环境中使用RichFaces,并提供了一些优化建议。 - **Sybase EAServer:** 对于使用Sybase EAServer的开发者,提供了特定的部署指南和注意事项。 - **Oracle AS/OC4J:** 针对...
RichFaces凭借其强大的功能集、灵活的组件库、高效的资源管理和皮肤技术支持,已成为构建现代化、高性能Web应用程序的理想选择。掌握RichFaces的核心概念和技术要点,对于任何致力于提升Web开发效率、优化用户体验的...
- **脚本和样式加载策略**:合理安排脚本和样式的加载顺序以优化页面性能。 - **请求错误和会话过期处理**: - **请求错误处理**:自动捕获并处理可能发生的请求错误。 - **会话过期处理**:当会话超时时采取适当...
此版本可能包括性能优化、新特性以及对旧版本问题的修复。 5. **JAR 文件**:Java 应用程序的可部署单元,包含编译后的类文件和其他资源,通常用于在 Java 平台上分发和执行代码。 6. **集成到项目**:开发人员...
这本手册不仅提供了详细的标签信息,还涵盖了错误处理、性能优化、国际化以及组件自定义等方面的指导。通过深入学习和实践,开发者可以充分利用RichFaces的功能,构建出既美观又高效的Web应用。 总而言之,...
5. 测试和调试:运行应用程序,进行功能测试和性能优化。 总的来说,RichFaces与JSF的结合为开发人员提供了强大的工具集,用于构建具有高度交互性和用户体验的现代Web应用程序。通过学习和掌握这些技术,开发者可以...
5. **性能优化**:RichFaces 4.0对性能进行了优化,如延迟加载和资源合并,降低了服务器负载,提高了应用响应速度。 集成RichFaces到JSF项目中,通常涉及以下步骤: 1. **添加依赖**:在项目中引入RichFaces的JAR...
总结,RichFaces UI 3.3.0.GA作为JSF开发的利器,以其丰富的组件库、强大的Ajax支持和优秀的性能优化,为开发者提供了高效、便捷的开发环境。通过深入理解和熟练应用,我们可以在Web应用开发中创造更丰富、更具吸引...
六、最佳实践与性能优化 书中的内容不仅限于基本使用,还会讨论如何遵循最佳实践来提高代码质量和性能。例如,使用条件渲染减少不必要的网络传输,合理配置Ajax请求的缓存,以及如何利用RichFaces的批处理功能来优化...
- 为提高性能,谨慎使用Ajax,避免无谓的网络请求。 - 合理规划组件布局,以优化页面加载速度。 - 充分利用RichFaces的事件处理机制,降低服务器负担。 总之,RichFaces组件库提供了丰富的功能,使得开发高质量...
在实际应用中,考虑性能优化是非常重要的。这可能涉及到减少HTTP请求、优化JavaScript代码、合理使用缓存以及调整服务器配置以提高响应速度。 8. **兼容性和跨浏览器支持** RichFaces组件通常对主流浏览器有良好...
考虑到Web应用的多平台访问需求,RichFaces优化了对各种浏览器的支持,包括IE、Firefox、Chrome等,确保了用户在不同设备上的无缝体验。 三、入门指南:快速上手RichFaces ### 1. 下载并集成 首先,开发者需从官方...