`
wangzl2222
  • 浏览: 150898 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

seam前端提速

阅读更多
Seam使用了richfaces做为jsf的组件库。richfaces的功能确实不错,但是性能上存在一些问题。一些简单的页面,用firefox打 开,YSlow插件都显示花掉了数秒时间。通过 firebug和YSlow插件,可以看到,打开页面的时候,浏览器会向发起很多请求,以下载javascript和css,而且这些文件的体积还不是很 少。减少请求次数,减小传输数据量,可以一定程序上改善客户端体验的性能。查阅richfaces的文档,终于找到了解决方法。

原来richfaces的默认方式是按需添下载js和css,更改它的一些参数,可以让它变成全部下载。方法是在web.xml里添加以下内容:

    <context-param>
        <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
        <param-value>false</param-value>
    </context-param>
  
    <context-param>
        <param-name>org.richfaces.LoadScriptStrategy</param-name>
        <param-value>ALL</param-value>
    </context-param>
  
    <context-param>
        <param-name>org.richfaces.LoadStyleStrategy</param-name>
        <param-value>ALL</param-value>
    </context-param>org.richfaces.LoadScriptStrategy参数让richfaces生成的页面里引用到所有js和css,并且是合并压缩过的版 本。因已经是压缩过的了,不需要再让ajax4jsf再压缩了,所以把org.ajax4jsf.COMPRESS_SCRIPT设成false。这样设 置过后,打开页面时发现,测览器这回只会下载两个js和一个css了,速度确有所提升。

另外,richfaces的rich:calendar组件不知道为什么,每次生成都会花掉很多时间。在我的开发机上,一个页面里如果添加一个rich: calendar,就会使页面生成时间多加一秒。看来richfaces还有很多要改进的地方。JSF的post->redirect-> get的方式(参看这篇文章)也是使用户体验慢的一个原因,但是这个JSF的一个基本的设计,难以改变。我很讨厌这种方式。再在回头看来,seam是不错,但是 seam把自己绑定在jsf上真是一大失误!

一般的网络程序和服务器的交互是完全自由的,用户在浏览器上对页面操作可能会引发对任一URL的任何一种方法的请求,点一个普通的超链接,引发一个GET 操作,单击一个提交按钮,引发一个POST等等,这都是完全自由的。但是在JSF的世界里,浏览器与服务器之间有着一个固定模式的交互方式,这是JSF的 节奏。
让我们看看这个节奏:a.浏览用GET请求一个页面 -> b.JSF生成指定页面的组件树,产生html页面返回 -> c.用户对浏览器上页面控件操作,引发一次对当前页面的POST请求 -> d.JSF重建组件树,执行业务动作,返回一个 重定向 。 然后就是一直循环下去,简要的来看就是 get -> 200 OK -> post -> 302 redirect -> get -> 200 OK -> post -> 302 redirect …。如果导航规则里没有指定POST后到其它页面,后面就不会有redirect,会把POST后的组件树再重新渲染成HTML返回。JSF的组件树 在浏览器的GET请求时被创建,在POST请求时被重建。你配置的导航规则决定了redirect到哪个页面,即浏览器下一次会对哪个页面发GET请求。 你获得的页面里面由h:commandButton h:commandLink等生成的链接按钮等在被触发时,都会引发一个POST请求。你在处理POST请求时放在request里的对象,在经过 redirect到为了GET生成页面时,已经不存在了。在没有SEAM的conversation的时候,我们只好把要夸越多个请求,又不需要存活于整 个SESSION的对象放到SESSION里,让SESSION变得杂乱充满隐患。
为什么JSF要让h:commandButton和h:commandLink都用POST方式来提交数据呢?JSF为了能够在用户点击链接或按钮后能重 建组件树,必然要在返回给客户端的HTML里添加很多额外的参数,这些参数是JSF自动生成的。如果用GET方式,这些信息都将写在URL里可能会超长, 出问题,所以最好的方式就是用POST了。另外,JSF也依赖于GET POST方法来确定你是要新建一个组件树来查看页面,还是要重建一个组件树来执行业务动作。这种方式等于重写了HTTP GET POST的语义,与REST的理念正好相反。如些的限定,也让你写页面不能放开手脚。
最后说一点,我非常不喜欢这种方式。
分享到:
评论
1 楼 yzhw 2011-05-18  
我要去试试

相关推荐

    Jboss Seam中文版

    这是一个全面的Seam应用案例,涵盖了从前端界面到后端服务的所有方面。 1. **系统概况**:整体介绍了系统的架构设计和主要功能模块。 2. **理解Seam业务(Conversation)**:重点讲述了Seam如何管理用户会话,保持...

    Seam in Action

    JSF作为Seam的前端展示层,提供了丰富的组件库和事件驱动模型,使得创建用户界面变得简单。Seam与JSF的结合,通过Seam组件,可以轻松处理复杂的数据绑定和事件处理,提高了UI开发的效率。 Seam中的EJB支持则允许...

    jboss seam 学习资料,seam in action和官方手册

    **JBoss Seam 学习资源概述** JBoss Seam 是一个开源的应用程序框架,它整合了JavaServer Faces (JSF)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA) 和其他Java EE技术,旨在简化开发过程,提高开发...

    seam_carving 代码实现 seam

    **Seam Carving 技术详解** Seam Carving,又称图像拉链,是一种基于能量最小化的图像调整方法,主要用于图像大小的动态调整,而不仅仅是简单的等比例缩放。它能够在保持图像主要结构不变的情况下,根据需要增加或...

    JBOSS SEAM组件中文手册

    **JBoss Seam组件中文手册** **一、Seam框架概述** Seam是一个开源的企业级Java框架,由JBoss公司开发,旨在简化Java EE应用程序的开发。它将多种技术如JavaServer Faces (JSF),Java Persistence API (JPA),EJB 3...

    Seam框架文档简述

    ### Seam框架核心知识点详解 #### 一、Seam框架简介 Seam,全称为JBoss Seam,是一款基于Java EE 5的技术栈构建的应用框架。它通过整合JSF(JavaServer Faces)与EJB 3.0(Enterprise JavaBeans 3.0)组件,并充分...

    为Seam做好准备

    "为Seam做好准备"这个标题暗示我们即将探讨的是关于Seam框架的入门与准备工作。Seam是一个Java EE集成框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Enterprise JavaBeans(EJB)3.0以及其他...

    JBoss Seam入门介绍

    从创建组件、定义业务逻辑到整合前端界面,Seam提供了一套完整的工具链和API,帮助开发者快速搭建企业级应用。例如,通过声明式状态管理,可以轻松管理用户的会话状态;通过Bijection,可以自动处理组件间的依赖注入...

    seam级联菜单例子

    然后,在前端,通过重新渲染`provinceSelect` ID所对应的JSF组件,更新省份菜单的选项。 此外,Seam还提供了事件处理和依赖注入等功能,使得在整个应用中管理这些级联菜单的数据变得更加方便。例如,`@Observes`...

    seam in action 中文 english

    《Seam in Action》是一本专门探讨Seam框架的书籍,该书分为中文和英文两个版本,对于初学者和有经验的开发者来说都是一个宝贵的资源。Seam是一个强大的Java EE框架,它集成了多种技术,如JavaServer Faces (JSF)、...

    MATLAB_Seam_Carving_seamcarving_

    MATLAB_Seam_Carving_seamcarving_ 是一个与图像处理相关的项目,主要涉及到一种称为“seam carving”的技术,这是一种动态图像调整大小的方法,它可以在不改变图像整体视觉效果的情况下,增加或减少图像的宽度和...

    seam_in_action

    根据提供的信息,我们可以推断出这是一本关于 Seam 框架的专业书籍,书名为《Seam in Action》,作者为 Dan Allen 和 Manning 出版社出版。本书主要讲解了 Seam 框架在 Java EE 3 环境中的应用与开发实践。接下来将...

    Seam security

    Seam Security是针对Java Web应用程序的安全框架,它是JBoss Seam项目的一部分,提供了全面的安全解决方案,包括身份验证、授权和身份管理等功能。Seam Security以易于配置和使用为特点,允许开发者快速设置应用程序...

    jboss seam 2.01GA REF DOC

    - **Seam 集成**:Seam 负责前端交互和业务逻辑处理。 #### 第八部分:RESTful Seam 应用示例 本节通过一个博客系统示例展示了如何使用 Seam 开发 RESTful 应用。 **1.9.1 使用“拉取”式 MVC** - **页面展示**...

    seam参考手册中文版

    ### Seam参考手册中文版知识点概览 #### 一、Seam简介及基本概念 ##### JBoss Seam概述 - **Seam**是JBoss家族中的一员,它是一个建立于Java EE平台之上的开源框架,旨在简化企业级应用的开发过程。 - **版本**: ...

    seam需要的jar包

    Seam框架是一个全面的Java企业级应用开发框架,它整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)以及许多其他Java EE技术,为开发者提供了强大的组件模型和丰富的功能,旨在简化...

    SEAM 中文开发指南

    ### SEAM 中文开发指南知识点概述 #### 一、SEAM 框架简介 - **SEAM**:SEAM 是一个基于 Java EE 的企业级应用框架,它简化了复杂的应用程序开发过程,并且提供了丰富的功能来支持业务逻辑的实现。 - **版本信息**...

    Seam Carving的C++实现代码

    Seam Carving是一种图像内容感知的尺寸调整方法,它能够在保持图像主要结构不变的情况下,智能地减少或增加图像的宽度和高度。这种方法是由Amit Agarwal和Matthieu Salzmann于2007年提出的,其核心思想是通过找到...

    seam的注解和标签

    Seam是一个Java EE框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Inversion of Control(IoC)和Enterprise JavaBeans(EJB)等技术融合在一起,为开发复杂的Web应用程序提供了便利。在Seam框架...

    eclipse 工程seam 例子2

    JSF与Seam的结合使得后端的业务逻辑可以轻松地与前端界面交互,提升用户体验。 在项目中,"MyMessages"可能是一个JSF的视图组件,用于展示和管理消息;"MyMessages-ejb"则包含与消息处理相关的EJB服务;而...

Global site tag (gtag.js) - Google Analytics