1

我有优化问题——我的网站使用了 2 个(相当大的)javascript 资源:

  1. application.js(最小化 jquery、jquery-ui、underscore-js 和一些共享脚本,总共 120KB)
  2. 特定于控制器的文件(页面 + 交互所需的一些模块,总共 4KB)

我在视图中有一些脚本可以使用 JavaScript 格式化/转换标记(依赖于 jQuery 和我的控制器特定的 JS 代码),所以我需要等待 $(document).ready 或 head.ready 并且它是网站不可见以防止无样式内容的闪烁:(

现在我的问题来了:我应该使用 head.js 还是只使用“之前”脚本?在这种情况下,有什么聪明的方法可以加快页面加载时间吗?

更新:这是代码的一部分(完整代码请参见 vsio.com,登陆页面):

<html>
  <head>
    ... usual stuff
    <link (css stuff) />
    <script src="head.js"></script>
    <script>
      // Here some global variables are set like cache keys, actual locale code etc., not dependable on jQuery or any other JS code from the JS assets
    </script>
  </head>

  <body>
    ... page content

    <div id="search">!-- here some code with the "display: none" style to prevent flash of unstyled content</div>
    <script>
      // Here is code that positions and processes some styles and adds some interactions to the #search div
      Application.Position.In.Center($(#search), $(document));
    </script>

    ... more page content

    ... another "display: none" div and accompanying script

    ... rest of the page content

    <script type="text/javascript">head.js( { 'application': 'application.js' }, { 'landing': 'landing.js' } );</script>

  </body>
</html>
4

4 回答 4

2

首先问自己这个问题:当用户访问我的页面时,我真的需要加载所有这些 javascript 吗?

首次加载网站时,您实际上只需要自动完成功能,加载时不需要其他功能。因此,您可以采用单独的方法。我的建议如下:

  • 在没有任何 javascript 功能的情况下构建此页面,然后使用 javascript 对其进行增强,摆脱内联样式和脚本。
  • 完成此操作后,加载您实际需要的脚本,您可以在头部或正文结束之前执行此操作
  • 为 Jquery、jquery-ui、下划线和其他库使用 CDN。如果用户已经从其他网站加载了这些库,您将获得性能奖励。
  • 最后,已经异步加载了稍后需要的javascript,所以用户在点击比较按钮时已经有了脚本。

小调整:

  • 使用 ySlow 之类的工具或您喜欢的浏览器中的网络图来查找任何瓶颈。看起来 gzipping 未启用,请尝试执行此操作。
  • 您是否真的需要在头部加载 facebook/google/twitter/third-party 的东西,或者可以在加载页面时完成?
  • 服务器是否尽可能快?看起来几乎需要半秒钟才能获得 HTML。

我希望我能帮助你一点,祝性能调整好运!

于 2013-02-11T14:03:27.237 回答
0

我认为,在页面底部放置一个加载脚本(作为正文中的最后一个标签)。那个 javascript 它不会像现在一样阻塞绘图页面。

于 2013-02-11T10:04:01.943 回答
0

您可以使用固定样式放置覆盖所有页面的遮罩层,然后在加载过程完成时隐藏或销毁它。这样就不需要隐藏每个内容,而是用掩码 div 覆盖

于 2013-02-11T10:36:13.453 回答
0

看到了您页面的视图源。

  1. 有一些内联脚本可以阻止渲染。比如这个

Application.i18n = {“比较”:{“off_ratio”:

更多在这里。http://calendar.perfplanet.com/2012/deciphering-the-critical-rendering-path/

快速方法:将它们移动到正文标签的末尾。最佳方式:它们应该作为外部脚本加载 - 具有非常好的缓存头。可能是,您这样做是因为 - 您必须根据用户区域设置加载这些消息 - 您可以在构建过程中为每个区域设置创建单独的 JS 文件 - 它们可以链接/加载为具有良好缓存标头的外部 JS 文件

另一个原因,为什么您可能需要内联脚本 - 记下初始加载时间。这不是必需的 - 因为现代浏览器为我们提供了性能时间。

http://www.html5rocks.com/en/tutorials/webperformance/basics/

将其作为外部脚本文件移动 - 也将有利于您的站点安全 - 以防万一,如果您将尝试 CSP。

http://updates.html5rocks.com/2012/11/Content-Security-Policy-1-0-is-officially-awesome

  1. 延迟/异步属性。

ga.js 设置了异步属性 - 但其他 JS 文件可以尝试使用 defer 属性。此外,作为一般经验法则,尽可能延迟加载资源,仅在需要时加载。

  1. window.onload - $.ready 使用 $.ready 开始执行脚本总是比 window.onload 更好。因为,window.onload 仅在所有图像、内部 iframe 被加载后才会触发。

以下链接可能有用。

https://developers.google.com/speed/

渐进式 JPEG 发布在 http://calendar.perfplanet.com/2012/

http://blog.chriszacharias.com/page-weight-matters

http://www.igvita.com/2013/01/15/faster-websites-crash-course-on-web-performance/

许多进一步的优化是可能的。祝一切顺利。

于 2013-02-17T14:24:13.543 回答