推迟primefaces.js加载

时间:2013-11-06 13:43:59

标签: javascript jsf-2 primefaces pagespeed deferred-loading

google pagespeed表示加载primefaces.js会降低我的页面速度:

来自pagespeed报告:

  

推迟解析JavaScript   通过最小化JavaScript的数量   需要呈现页面,并推迟解析不需要的   JavaScript直到需要执行,你可以减少初始   加载页面的时间。

Suggestions for this page
 284.3KiB of JavaScript is parsed during initial page load. Defer parsing JavaScript to reduce blocking of page rendering.
 https://www.mysite.co.uk/.../primefaces.js.xhtml?... (185.4KiB)
 https://www.mysite.co.uk/.../jquery.js.xhtml?... (95.1KiB)

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

为遇到相同问题的其他人添加此问题的其他解决方案。

您需要自定义素数HeadRenderer以实现pagespeed建议的排序。虽然这可以由PrimeFaces实现,但我在v5.2.RC2中没有看到它。这些是encodeBegin中需要更改的行:

96         //Registered Resources
97         UIViewRoot viewRoot = context.getViewRoot();
98         for (UIComponent resource : viewRoot.getComponentResources(context, "head")) {
99             resource.encodeAll(context);
100        }

只需为head标记编写自定义组件,然后将其绑定到覆盖上述行为的渲染器。

现在你不想仅仅为了这个改变而复制整个方法,添加一个名为" last"的方面可能更简洁。并将脚本资源作为新的deferredScript组件移动到渲染器的开头。让我知道是否有兴趣,并且我将创建一个分支来演示如何。

这种方法是未来的证明"从某种意义上说,当新的资源依赖关系被添加到组件中时,或者当新的组件被添加到视图中时,它不会中断。

答案 1 :(得分:-1)

您可以通过将脚本从head标记移动到正文的末尾(在关闭之前)来推迟页面加载,因此脚本在加载页面标记后开始加载,还要注意,primefaces会自动缓存,因此第一个请求是使用chached脚本的另一个请求。