将jsf.js放在正文的末尾

时间:2018-12-04 11:03:54

标签: jsf jsf-2 jsf-2.2 jsf-2.3

我已部署了Java EE 8 Web应用程序。它使用JSF 2.3 我使用Google PageSpeed Insights进行了测试。一条建议说:

消除渲染阻止资源

…font/fonts-min.css.xhtml?ln=custom(**.com)
…fullcalendar/fullcalendar.bundle-min.css.xhtml?ln=vendors(**.com)
…base/vendors.bundle-min.css.xhtml?ln=vendors(**.com)
…base/style.bundle-min.css.xhtml?ln=demo(**.com)
…fix/poppins.css.xhtml?ln=custom(**.com)
/javax.faces.resource/jsf.js.xhtml?ln=javax.faces(**.com)

因为JSF框架默认添加了jsf.js。有没有一种解决方案,所以我可以将其加载到正文的其他JavaScript旁边。如果有的话,那会是个好主意吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

如果使用PrimeFaces,则可以通过上下文参数激活“ MOVE_SCRIPTS_TO_BOTTOM”功能。

这会将所有脚本(包括脚本src =“ ...”)移到底部,并且还将所有内联脚本(...)合并为一个内联脚本。

这确实是一个很大的性能提升。

请参阅:https://github.com/primefaces/primefaces/issues/2888

答案 1 :(得分:1)

可以使用target="body"属性将脚本放置在正文的末尾:

<h:head>
    <h:outputScript name="jsf.js" library="javax.faces" target="body"/>
</h:head>

但是,正如Kukeltje所指出的那样,请记住,这可能会有副作用,并且优化增益可能仅限于首次请求。

参考实现(mojarra)将此脚本显式添加到<head>元素中,这可能有充分的理由:

com.sun.faces.renderkit.RenderKitUtils.installJsfJsIfNecessary(FacesContext)

context.getViewRoot().addComponentResource(context, createJsfJs(), "head");