我使用 MyFaces 1.2.6 和 Richfaces 3.3.1GA(刚刚升级)开发了一个 Web 应用程序。尽管易于使用,但我发现 Richfaces 组件非常慢。
我还发现他们并没有真正利用浏览器缓存机制,他们在每次请求和其他事情时都会发送一些糟糕的 JS 文件。我真的很想应用“高性能网站”一书中描述的一些规则,但我无法更改生成的 js 和 HTML 代码。
有没有人有一些使用 Richfaces 进行前端性能调整的技巧?
谢谢。
我使用 MyFaces 1.2.6 和 Richfaces 3.3.1GA(刚刚升级)开发了一个 Web 应用程序。尽管易于使用,但我发现 Richfaces 组件非常慢。
我还发现他们并没有真正利用浏览器缓存机制,他们在每次请求和其他事情时都会发送一些糟糕的 JS 文件。我真的很想应用“高性能网站”一书中描述的一些规则,但我无法更改生成的 js 和 HTML 代码。
有没有人有一些使用 Richfaces 进行前端性能调整的技巧?
谢谢。
阅读这篇文章。
您是否使用 Firebug + YSlow 来检查缓存中存储的内容?使用 web.xmlorg.richfaces.LoadScriptStrategy
设置,您可以告诉 Richfaces:
但一些基本原则:
永远不要将逻辑放入您的吸气剂中。它们被多次调用,并且应该只返回已经由另一种方法填充的内容。例如,如果您将下拉列表链接在一起
a4j:support
,则在第一个下拉列表上使用一个带有 action 属性的标签,该属性加载数据,然后在您重新渲染第二个下拉列表时检索该数据。
ajaxSingle="true"
除非您真的想将整个表单发送回服务器,否则请使用。
如果您只需要一个普通的组件,请不要使用丰富的组件。例如,rich:dataTable
除非您正在使用它所具有的某些功能,否则
不要使用它h:dataTable
。
您可以使用:org.ajax4jsf.DEFAULT_EXPIRE 31536000
这样所有的js、css文件(由richfaces生成)在浏览器上缓存1年。这确实提高了我们项目的速度。
此外,我们不必担心如果我们更改richfaces 版本,因为当我们更改richfaces 版本时,它会生成不同的文件。
要添加到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);
}
}