preload =“true”超链接

时间:2010-07-19 22:00:31

标签: jquery apache optimization

是否有方法,javascript脚本或任何可以允许在页面中预加载超链接的内容?例如,我希望当用户来到http://ahostel.lt/并且页面完全加载时,脚本将开始预加载导航中的其他页面(预订,地图,设施,环顾四周,[...])。因此,当用户点击任何这些超链接时,页面将立即加载。如何做到这一点?

4 个答案:

答案 0 :(得分:2)

你可以这样做:

$(function() {
  $('a').each(function() {
    new Image().src = $(this).attr('href'); // or just this.href
  });
});

它们不是图像,但浏览器不知道。您可能希望将其减慢一点,以免过多地阻塞连接:

$(function() {
  var urls = $('a').map(function(_, a) { return a.href; }).get(0);
  var i = 0;
  function fetchOne() {
    if (i === urls.length) return;
    var img = new Image();
    img.load = fetchOne;
    img.src = urls[i++];
  };
  fetchOne();
});

编辑 - @Adam对fetch的“危险”链接提出了非常好的观点。将某些链接标记为“noPrefetch”(作为类或其他内容)可能更好,或者仅预取使用“prefetch”类明确标记的链接。

答案 1 :(得分:1)

尚未尝试过,但基于this blog post,您可以执行以下操作:

$("a").each(function(){
  $.ajax({ url:$(this).attr("href"), cache:true, dataType:"text" });
});

你应该小心,但如果你有像Logoff这样的链接,那么用户就可以注销了。 See Wikipedia for more problems with prefetching

答案 2 :(得分:1)

HTML5规范中实际上已经为此提供了相关内容,但目前仅支持Firefox。

<link rel="next" href="page2.html">

将此作为非JavaScript替代方案抛弃给您。

答案 3 :(得分:0)

将此与离线存储概念相结合,您就拥有了胜利者。您可以预取所有主要导航页面,并且每个导航页面的每个登录页面都可以预取下一个导航页面,依此类推,放置在离线存储中(window.localStorage或window.sessionStorage)。对于JSON等来说会很棒。由于您的密钥可能包含时间戳指示符,因此您可以更好地控制需要过期的缓存。可能更适合于每次都不需要加载产品目录的电子商务网站。例如,您可以将JSON放在那里,并立即恢复生命。

我不确定这个考虑缓存的离线存储是否合适。想法?