JSF Richfaces前端性能调优

时间:2009-05-21 06:09:06

标签: java javascript performance jsf richfaces

我使用MyFaces 1.2.6和Richfaces 3.3.1GA开发了一个Web应用程序(刚刚升级)。 尽管易于使用,但我发现Richfaces组件非常慢。

我还发现他们并没有真正利用浏览器缓存机制,他们不断发送一些糟糕的JS文件,每个请求和其他东西。 我真的想应用“High PErformance WEbsites”一书中描述的一些规则,但我无法更改de generated js和HTML code。

有没有人对使用Richfaces进行前端性能调整有一些提示?

感谢。

3 个答案:

答案 0 :(得分:12)

阅读this article

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

  • 将所有脚本加载到一个文件中。
  • 不加载任何脚本(您可以自己动手 - 例如,按照您的书规定的方式)。
  • 在需要时加载脚本(默认值)。

但是一些基本原则:

  • 永远不要将逻辑放入吸气剂中。 它们被多次调用 应该只返回一些东西 由另一种方法填充。对于 例如,如果你是链接 下拉使用一起 第一个a4j:support标记 带有一个加载的动作属性 然后检索的数据 你是第二个人。

  • 除非使用ajaxSingle="true" 你真的想发送整个 返回服务器。

  • 如果您使用,请不要使用丰富的组件 只需要一个正常的。例如 除非你,否则不要使用rich:dataTable 正在利用一些 它具有超越的功能 h:dataTable

答案 1 :(得分:0)

您可以使用:              org.ajax4jsf.DEFAULT_EXPIRE         31536000     

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

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

答案 2 :(得分:0)

要添加到Damo,您还可以添加一个小过滤器来缓存此类j或图像以提高性能。但是,如果要进行缓存的文件涉及频繁更新,请谨慎行事。

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);
        }
  }