【问题标题】:Pre-cache site as user visits用户访问时预缓存站点
【发布时间】:2012-08-05 00:09:34
【问题描述】:

我正在制作一个静态站点,该站点被“强制”通过Cache-control 等进行缓存。

当用户访问我的网站时,我希望浏览器抓取我的网站,缓存页面,因此当用户导航到某个页面时,负载几乎是即时的。

(我不需要递归爬取,因为这可能会在用户在页面之间导航时发生。我只需要爬取当前页面上的链接,当然不需要重新缓存已经缓存的页面.)

(另外,我不会使用类似 Ajax 的技术更改页面。这些本质上是带有普通链接的普通平面 HTML 文件。)

如何使用 Javascript 进行预缓存? (我正在使用 jQuery。)

【问题讨论】:

    标签: javascript jquery caching


    【解决方案1】:
    $.ajaxSetup({ cache : true, type : 'GET' });
    
    $('a').each(
        function()
        {
            $.ajax({ url : $(this).attr('href') });
        }
    );
    

    但我不确定您的浏览器是否会在不使用 XmlHttpRequest 的情况下缓存页面以供进一步使用。

    【讨论】:

    • 这是我的方法。根据我的经验,除非另有说明,否则 XmlHttpRequest 对象会缓存页面请求 - 无论后续请求是“自然”浏览器请求还是进一步的 AJAX 调用,该缓存都是有效的。如果您向客户端强制缓存标头,则对页面上链接 href 的任何 AJAX 调用都应实现您要求的预缓存行为。当然,这只是我经历过的行为——我不能说这是否是值得信赖的行为。
    • 由于某种原因,Firefox 并不总是尊重我在 Ajax 请求中设置的缓存。不过,它适用于大多数请求,并且始终保留缓存,因此页面导航速度很快。感谢您的回答!
    【解决方案2】:

    不仅缓存静态内容,还需要做很多事情来提高网站性能看看Enhancing user browser experience

    【讨论】:

    • 我明白这一点。我想pre缓存页面,所以在用户访问之前它已经被缓存了。
    【解决方案3】:

    查看新的 HTML5 功能,即Cache Manifest

    【讨论】:

    • 我应该提到这需要在 IE7/8、Safari 和 Firefox 上合理地工作。
    • 嗯,这是在不支持它的浏览器上甚至不会注意到的事情之一,所以我还是建议这样做。
    • 否则您可能对此感兴趣:developer.mozilla.org/en/Link_prefetching_FAQ
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2020-05-05
    相关资源
    最近更新 更多