JSF推迟解析JavaScript的最佳方法?

时间:2012-04-25 06:49:17

标签: javascript jsf pagespeed

使用JSF推迟加载JavaScript库(Richfaces,Primefaces,自己的东西)加速页面加载的最佳方法是什么?

Google PageSpeed插件表示,建议在网站完全加载时解析JavaScript。实现此目的的一种方法是将JavaScripts加载到<body>标记的末尾。另一种方法是将“defer”属性设置为<script>标记,这与我看到的JSF的<h:outputScript>标记无法完成。

那么,你会怎么做?

2 个答案:

答案 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文件被包括在里面......