使用JSF推迟加载JavaScript库(Richfaces,Primefaces,自己的东西)加速页面加载的最佳方法是什么?
Google PageSpeed插件表示,建议在网站完全加载时解析JavaScript。实现此目的的一种方法是将JavaScripts加载到<body>
标记的末尾。另一种方法是将“defer”属性设置为<script>
标记,这与我看到的JSF的<h:outputScript>
标记无法完成。
那么,你会怎么做?
答案 0 :(得分:4)
使用<h:outputScript target="body">
。然后它会在<h:body>
的最后结束。它默认为视图中的“当前”位置(另一个target
值为head
,这将使脚本最终在<h:head>
中,即使在某处指定了脚本<h:body>
)。
<h:outputScript name="js/foo.js" target="body" />
如果您还要将此应用于第三方脚本,则需要在SystemEventListener
上创建自定义PreRenderViewEvent
挂钩,并在UIViewRoot#getComponentResources()
和UIViewRoot#addComponentResource()
的帮助下完成此操作{3}}
答案 1 :(得分:0)
不知道这是否重要(你可以称之为解决方法),
但是你总是可以在外部xhtml页面中包含一些js文件,这些文件将包含在你的主页面中ui:include
,它将由<h:panelGroup id="externalPageWrapper" render="#{myBean.renderExternalPage}"
包裹,并且在js / jquery的帮助下你可以执行.click()
隐藏h:commandButton
f:ajax
renderExternalPage
会将externalPageWrapper
更改为true并呈现将加载该xhtml页面的{{1}}以及所有js文件被包括在里面......