2

我部署了一个 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 旁边的正文末尾。如果有,那会是个好主意吗?

谢谢。

4

2 回答 2

5

If you use PrimeFaces, you could activate the "MOVE_SCRIPTS_TO_BOTTOM" feature via context-param.

This moves all script includes (script src="...") to the bottom and it also merges all inline scripts (...) to a single inline script.

This is really a great performance boost.

See: https://github.com/primefaces/primefaces/issues/2888

于 2018-12-04T14:08:24.363 回答
2

可以使用以下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");
于 2018-12-04T12:29:56.903 回答