5

我目前正在尝试使用下面的代码(req. jQuery)预取页面以提高我们网站的感知性能。

只有 0.5% 的访问者使用拨号,我不包括查询字符串(过去的美好时光)、外部链接(http)和 pdf(我们的大文件是这种格式)。在生产站点上,预取我没有考虑过的其他可能的负面情况是什么?

<script type="text/javascript">
$(document).ready(function() {
$("a").each(
function(){
    $(this).bind ("mouseover", function() {
        var href=$(this).attr('href');
        if (
            (href.indexOf('?') == -1)&&
            (href.indexOf('http:') ==-1)&&
            ($(this).hasClass('nopreload') == false)&&
            (href.indexOf('.pdf') == -1)
        ) {
            $.ajax({ url:href, cache:true, dataType:"text" });
        }
    });
    $(this).bind ("mousedown", function(btn) {
        if (btn.which==1) {
            var href=$(this).attr('href');
            if ($(this).hasClass('nopreload') == false) {
                window.location.href = href;
                return false;
            }
        }
    });
});
});
</script>

对于某些链接,当将鼠标悬停在它上面时,它将预加载页面,并且在 mousedown 时将导航(而不是在释放按钮之后)。

4

5 回答 5

2

在编码错误的网站(有很多)上,单击链接可能会产生影响。例如,在许多站点上,删除按钮实际上是一个链接,单击该链接会删除一条记录。您必须绝对确保您的网站有零标准原版链接,当向其发送 GET 请求时,会产生有害的副作用。

您还必须确保用户不可能包含类似的链接。我还可以对外部投票服务的链接进行成像,例如,通过添加可点击的链接,可以轻松地在某个论坛中进行投票,这些链接会更新投票并重定向到 REFERER。

危害较小的是,网站可能会采取聪明的技巧来跟踪活动,从而跟踪每个预取的页面。这可能会影响您网站的统计数据或日志记录,并可能使您对用户活动的看法受到扭曲。

也就是说,我喜欢这个主意!:-)

于 2011-03-14T13:25:04.887 回答
2

右键单击也会触发鼠标按下事件 - 因此您可能需要检查事件数据。

我猜 20-30kb 的 html 源代码的速度增益相当低。您的函数不预加载任何图像、css 或 js 文件,而只预加载纯 html 代码。

于 2011-03-14T13:25:37.727 回答
0

在我看来,没有多大意义。如果您在整个站点范围内使用 javascript 和 CSS,那么您唯一需要缓存的就是图像,这可以在每页页面的基础上使用 javascript 来完成。在我看来,你给你的服务器太多不必要的工作了。

当您将鼠标悬停在链接上时,它将加载并缓存页面,正确。但是当您导航到该页面时,浏览器将再次请求该页面,而服务器仍然必须构建它并发送它,这使得缓存过程毫无意义。

于 2011-03-14T15:09:12.060 回答
0

您是否考虑过 HTML 5 中定义的预取?我不太确定目前有多少浏览器支持它,但值得一试恕我直言。我以为FF 支持它,但我无法让它工作,但 Chrome 似乎确实做到了。

通常你可以在头部设置:

<link rel="prefetch" href="abc.html">

在 Chrome 中进行动态“onmouseover”的快速测试也可以:

<a onmouseover="var l=document.createElement('link'); l.rel='prefetch'; l.href=this.href; document.getElementsByTagName('head')[0].appendChild(l);" href="abc.html">abc</a>
于 2011-03-14T15:18:53.477 回答
0

这是一个缺点:当我将它们写入页面时,Chrome 会尝试预取我的事件跟踪像素,这会导致双倍展示。

于 2015-07-24T20:53:51.907 回答