JSF:资源组件是否经过优化?

时间:2012-02-09 11:48:03

标签: java jsf resources

我知道,它并没有多大区别,但在JSF 2中,我可以用两种方式之一输出资源(例如css):

a)使用标准的html <link>组件和组件的绝对路径。这被视为文本,因此不会内置到组件中。

b)使用jsf <h:stylesheet>并设置其名称和库。

现在,如果我正在编写主模板网站,那些不会改变(固定)的东西,我最好使用纯文本并给出资源的绝对路径吗?使用它和jsf组件之间的性能是否有任何变化,即使无关紧要?

JSF是否优化了对此的访问权限,以便每次呈现页面时都不必定位资源?

所有类型的资源,图片和JavaScript都是如此。

2 个答案:

答案 0 :(得分:3)

优化实际上取决于所使用的JSF实现,但是,Mojarra和MyFaces都高度优化了资源处理的性能。已经计算了服务器端和客户端缓存的每种可能性。访问最多的资源缓存在服务器的内存中,I / O传输通过通道,设置了正确的ETagLast-Modified响应头,等等。对于Mojarra来说,这是一个很好的起点。检查它是如何处理的是com.sun.faces.application.resource.ResourceHandlerImpl#handleResourceRequest()方法。

答案 1 :(得分:1)

不是<h:stylesheet>而是<h:outputStylesheet>

JSF组件在渲染时转换为纯HTML,因此当您看到页面的源代码时,您将找不到任何jsf组件,所有jsf组件都会根据html组件自动转换为。

此标记将转换为html,如下所示

<h:outputStylesheet library="css" name="style.css"  />

HTML输出......

<link type="text/css" rel="stylesheet" 
   href="/JavaServerFaces/faces/javax.faces.resource/style.css?ln=css" />

警告

When render CSS file via <h:outputStylesheet /> tag, remember put the <h:head /> 
tag as well;  Otherwise the css file will not render successful.

参考http://www.mkyong.com/jsf2/how-to-include-cascading-style-sheets-css-in-jsf/