【问题标题】:Defer primefaces.js loading [duplicate]推迟primefaces.js加载[重复]
【发布时间】:2013-11-17 18:52:04
【问题描述】:

谷歌页面速度表明加载 primefaces.js 正在减慢我的页面速度:

来自页面速度报告:

延迟解析 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)

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

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

    您将需要自定义 primefaces 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 组件在您的渲染器中移动到它的开头可能会更简洁。如果有兴趣,请告诉我,我将创建一个 fork 来演示。

    这种方法是“面向未来的”,因为它不会随着新的资源依赖项添加到组件或新组件添加到视图而中断。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如何移动脚本?这些是由primefaces自动插入的。
      • 你可以通过移动其他脚本来最小化负载我认为你可以移动primefaces,但只能在he​​ad标签内。也不要太担心 pagespeed 和 yslow 建议,其中一些可能有点极端且难以解决。
      • 你还没有真正回答手头的问题。
      • 任何想法如何得到这个工作?我发现这篇文章如何以某种方式在 JSF (stackoverflow.com/questions/10310676/…) 中完成,但根本没有让它工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多