将 jsf.js 放在正文的末尾
putting jsf.js at the end of the body
我部署了一个 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.js 是 JSF 框架默认添加的。有没有解决方案,以便我将它加载到正文的末尾,紧挨着其他 javascript。如果有,那会是个好主意吗?
谢谢。
可以使用 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");
如果您使用 PrimeFaces,您可以通过上下文参数激活 "MOVE_SCRIPTS_TO_BOTTOM" 功能。
这会将所有包含的脚本 (script src="...") 移至底部,并将所有内联脚本 (...) 合并为单个内联脚本。
这确实是一个很大的性能提升。
我部署了一个 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.js 是 JSF 框架默认添加的。有没有解决方案,以便我将它加载到正文的末尾,紧挨着其他 javascript。如果有,那会是个好主意吗?
谢谢。
可以使用 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");
如果您使用 PrimeFaces,您可以通过上下文参数激活 "MOVE_SCRIPTS_TO_BOTTOM" 功能。
这会将所有包含的脚本 (script src="...") 移至底部,并将所有内联脚本 (...) 合并为单个内联脚本。
这确实是一个很大的性能提升。