【问题标题】:Pre-loading external files (CSS, JavaScript) for other pages为其他页面预加载外部文件(CSS、JavaScript)
【发布时间】:2009-06-29 18:39:08
【问题描述】:

我很好奇是否有一种有效的方法来等待网站首页加载,然后预加载我知道网站上其他页面可能需要的 CSS 和脚本文件。

我希望网站的首页尽可能快(精简和平均)。用户很可能不会立即点击链接。由于可能会有一些空闲时间,这似乎是预加载一些外部资产的好时机。预加载应该会导致它们被缓存。当用户确实点击另一个页面时,唯一需要的请求将是内容和可能的一些图像等。

有人做过吗? 这是个坏主意吗? 有没有优雅的实现方式?

【问题讨论】:

    标签: javascript jquery html css preload


    【解决方案1】:

    这是一个有趣的想法,我不确定它是否可以通过 Javascript(至少是 CSS 部分)来完成。

    您可以在页面上放置一个 IFRAME 以及要加载的其他资源,但在其上放置一些 CSS 以隐藏它...

    .preload {
        position : absolute;
        top      : -9999px;
        height   : 1px;
        width    : 1px;
        overflow : hidden;
    }
    

    如果你把它放在页面的末尾,那么我认为它会在页面的其余部分之后加载。如果没有,那么您可以使用一些 Javascript 和 setTimeout 在页面加载后实际创建 IFRAME。

    【讨论】:

    • 我确实在 jquery 中使用 $(window).load(xxx) 进行了尝试。效果很好。感谢 iFrame 的想法!预先加载了一些巨大的图像,并立即加载了下一页。我可以看到它的用途!
    • 这正是我在看到这个答案之前想要做的。好技巧!
    【解决方案2】:

    人们提倡的隐藏 iFrame 想法会很好用。

    如果着陆页的页面加载时间也是一个优先事项,那么要做的是在页面完成加载后在 javascript 中动态创建 iFrame。

    【讨论】:

      【解决方案3】:

      带宽决定由您决定。

      如果您预加载所有内容,您将获得更好的用户体验,但非常高的带宽消耗,因为用户甚至可能永远不会使用已加载的内容,从而使其效率非常低.

      如果您不预加载任何内容,带宽将被使用到最低限度,并且用户只加载它需要的内容。

      【讨论】:

        【解决方案4】:

        如果您只想将它​​们加载到浏览器的缓存中,我想您可以通过隐藏 iframe 中的文档来实现。

        【讨论】:

          【解决方案5】:

          我同意 Gareth 的观点,我会动态创建 iframe。您需要将此代码作为着陆页上的最后一件事。

          例如:

          ....
            <script type="text/javascript">
              preloadContent();
            </script>
          </body>
          </html>
          

          至于缓存,这实际上取决于您的设置。但是在 Yahoo! 上的引用!网站应该是一个好的开始:http://developer.yahoo.com/performance/rules.html#expires 简而言之,一个好的技术是让你的静态文件(CSS、图像,甚至可能是脚本)的有效期为 1 年。这样,您的客户端获取的任何内容都将保存在浏览器缓存中,甚至无需检查新版本。

          如果您确实必须修改文件:

          • 为图片创建不同的文件(即不同的文件名)
          • CSS 和脚本可以在末尾附加版本/日期编号。

          这可确保客户端永远不会使用过时的内容。

          干杯!

          【讨论】:

            【解决方案6】:

            我认为您应该分析用户在登陆您的主页后需要多长时间才能到达另一个页面。

            然后检查主页上哪些链接最常被关注,并在主页/OnLoad 事件中触发一个计时器函数 setTimeOut,该函数将执行您的辅助函数,并为最可能的下一个链接预加载代码。

            【讨论】:

              【解决方案7】:

              您可以像这样预取任意文件(CSS、图像等),问题是小回报和增加的带宽成本是否使其成为现在追求的正确优化。 The Yahoo performance rules 是一个很好的起点。如果这是您的第一次性能优化,那么您可能从错误的地方开始。这绝对是一个具有重大权衡(增加带宽)的优化,而其他优化(如“最小化 HTTP 请求”)成本更低,回报可能更大。

              要以跨浏览器兼容的方式执行此操作,您基本上需要将代码添加到页面的 onload 事件中,该事件会创建一个 DOM 对象,例如 ,并将其 src 设置为您要预取的 URL。请注意,由于大部分访问者可能只访问您的首页,他们永远不会请求您预加载的文件。我已经看到像这样进行预加载会导致预取文件的请求和带宽增加数倍。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-02
                • 1970-01-01
                相关资源
                最近更新 更多