richfaces性能优化

本文介绍如何通过配置Richfaces的加载策略、使用不同的过滤器类型以及启用组件缓存等方式提升页面加载速度和整体性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用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>

 

内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值