4

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

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

有没有人有一些使用 Richfaces 进行前端性能调整的技巧?

谢谢。

4

3 回答 3

12

阅读这篇文章

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

  • 将所有脚本加载到一个文件中。
  • 不加载脚本(你自己做——例如,按照你的书规定的方式)。
  • 需要时加载脚本(默认)。

但一些基本原则:

  • 永远不要将逻辑放入您的吸气剂中。它们被多次调用,并且应该只返回已经由另一种方法填充的内容。例如,如果您将下拉列表链接在一起 a4j:support,则在第一个下拉列表上使用一个带有 action 属性的标签,该属性加载数据,然后在您重新渲染第二个下拉列表时检索该数据。

  • ajaxSingle="true"除非您真的想将整个表单发送回服务器,否则请使用。

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

于 2009-05-22T08:45:41.300 回答
0

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

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

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

于 2010-08-13T06:44:38.117 回答
0

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

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);
        }
  }
于 2011-03-08T07:51:29.490 回答