用于静态内容的JSF库 - 或普通的静态文件 - 性能?

时间:2011-10-13 20:25:53

标签: jsf-2

我们有两种方式可以提供图片,javascript,css等项目。

  • 静态区域,例如“/images/foo.png”
  • 一个JSF库,它呈现诸如“/javax.faces.library/foo.png?ln=images”之类的东西

后者似乎是JSF中的事情。这很容易做到。有很多支持。

前者在性能重要的情况下允许有趣的技巧。我们可以安排我们的服务器不将/ images传递给servlet引擎,而是使用更快的东西。公平地说,我不知道有没有人使用我们的软件做过这个,或者有多少像Tomcat或JBoss这样的东西服务于Apache等本地的静态内容,以及这对业务逻辑的成本有多大这也是为了提供应用程序本身。

我们希望在这两种情况下,图像都能在很长时间内提供,因此浏览器可以缓存它们。我注意到JSF版本有一个查询字符串部分,所以希望浏览器不会决定它知道更好并拒绝缓存。我们必须看一些痕迹,看看发生了什么。

那该怎么办? JSF库?特别是h:outputScript和h:outputStylesheet控件之类的支持?或者网站的图像区域?

由于   - 理查德

2 个答案:

答案 0 :(得分:1)

出于性能原因,我发现自己最好使用自定义解决方案,其中jsf不管理我的页面依赖性。通过某种自定义“资源管理”servlet拥有自己的依赖项解析机制,可以为您在请求每个资源时所做的工作提供很大的灵活性

这样做的一些好处,

  • 根据您的要求添加缓存标题
  • 能够提供连锁资源,而不是一次提供一个资源。因此,如果您构建类似“http://server.com/app/resources/one,two.js的资源URL,则可以通过在内存中连接它们来在一个请求中同时提供文件one.js和two.js。
  • 只需更改图像上的查询参数即可使用自定义缓存失效策略。例如。 http://server.com/app/resources/images/apple.jpg?version=1其中“version”可以是您的应用程序的版本。
  • 维护自己的静态资源目录结构,而不必严格依赖jsf的资源目录结构。

或者,您也可以将所有这些委托给其他应用程序或第三方,以便更好地完成所有这些工作。

答案 1 :(得分:0)

您可以采取一些措施来提高屏幕和静态内容/库/ java脚本的性能

  1. GZIP过滤器会显着缩短初始加载时间。它在转移到客户端浏览器时压缩页面内容。请参阅https://stackoverflow.com/a/35567295/5076414
  2. 您还可以实施 cacheFilter 来提高性能 您的屏幕与基于JavaScript的UI相同。这将缓存屏幕的静态内容,如图标,图像,样式表,javascripts等。您可以控制要缓存的内容和要排除的内容。请参阅https://stackoverflow.com/a/35567540/5076414
  3. 对于客户端UI组件,您可以使用 Primefaces ,即JQuery 基于UI。
  4. 如何验证我的屏幕是否正在使用gzip和缓存

    要查看您的内容是否已经使用gzip和缓存,请执行 Google Chrome 浏览器 - >右键点击你的屏幕 - >检查 - >点击网络标签 - >刷新你的屏幕。 点击图片,图标,样式表,看看您是否在响应标题

    中看到了以下内容

    Cache-Control:max-age=2592000如果元素的状态是304(来自缓存)

    Content-Encoding:gzip如果元素的状态为200