Java JSF前端性能调优

Java JSF前端性能调优,java,javascript,performance,jsf,richfaces,Java,Javascript,Performance,Jsf,Richfaces,我使用MyFaces1.2.6和Richfaces 3.3.1GA(刚刚升级)开发了一个web应用程序。 尽管使用起来很方便,但我发现Richfaces组件非常慢 我还发现,他们并没有真正利用浏览器缓存机制,每次请求和其他事情,他们都会发送一些糟糕的JS文件。 我真的很想应用“高性能网站”一书中描述的一些规则,但我不能更改反生成的js和HTML代码 有人对使用Richfaces进行前端性能调优有什么建议吗 谢谢。读一读 您是否使用Firebug+YSlow检查缓存中存储的内容?使用web.xml

我使用MyFaces1.2.6和Richfaces 3.3.1GA(刚刚升级)开发了一个web应用程序。 尽管使用起来很方便,但我发现Richfaces组件非常慢

我还发现,他们并没有真正利用浏览器缓存机制,每次请求和其他事情,他们都会发送一些糟糕的JS文件。 我真的很想应用“高性能网站”一书中描述的一些规则,但我不能更改反生成的js和HTML代码

有人对使用Richfaces进行前端性能调优有什么建议吗

谢谢。

读一读

您是否使用Firebug+YSlow检查缓存中存储的内容?使用web.xml
org.richfaces.LoadScriptStrategy
设置,您可以告诉richfaces:

  • 将所有脚本加载到一个文件中
  • 不要加载脚本(你自己做——比如按照书中规定的方式)
  • 在需要时加载脚本(默认设置)
但是一些基本原则:

  • 永远不要把逻辑放在你的getter中。 它们被多次调用,并且 应该已经归还了一些东西 由另一个方法填充。对于 例如,如果您正在链接 下拉列表一起使用
    a4j:支持第一个标签上的标签
    具有加载的操作属性
    然后在以下情况下检索的数据:
    你重播第二个

  • 使用
    ajaxSingle=“true”
    除非 你真的想把整个 表单返回到服务器

  • 如果需要,请不要使用富组件 只需要一个普通的。例如 不要使用
    rich:dataTable
    ,除非 正在利用一些 它拥有的功能远远不止于此
    h:dataTable

您可以使用: org.ajax4jsf.DEFAULT\u过期 31536000

因此,所有js、css文件(由richfaces生成)在浏览器上缓存1年。 这确实提高了我们项目的速度


此外,我们不必担心如果更改richfaces版本,因为更改richfaces版本时会生成不同的文件。

要添加到Damo,您还可以添加一个小过滤器来缓存此类js或图像,以提高性能。但是,如果用于cach的文件涉及频繁的更新,则在执行此操作时要谨慎

private void cacheImages(HttpServletRequest request, 
        HttpServletResponse response) {
        try {
              String requestPath = request.getRequestURI();
              if (requestPath != null) {
                    if (requestPath.contains("/images/")
                                || requestPath.contains("/scripts/")
                                || requestPath.endsWith(".js")
                                || requestPath.endsWith(".gif")) {
                          response.setHeader("Cache-Control", "max-age=36000");
                    }
              }
        } catch (RuntimeException e) {
              // do nothing except log
              Log.error(this, e);
        }
  }

+1.这是Dan Allen的第二篇文章(他是这两篇文章的作者,也是Seam in Action的作者):