Rel PreRender / PreFetch,它是否执行JS?

时间:2012-05-15 14:59:13

标签: javascript preloading prefetch prerender

<!—Firefox Prefetching -->
<link rel="prefetch" href="http://www.example.com/page2.html">

<!—Chrome Prefetching -->
<link rel="prerender" href="http://www.example.com/page2.html">

如果我在页面上使用Javascript进行预呈现/预取(例如Google Analytics JS),那么prerender / prefetch会在页面上执行Javascript吗?或者它是否会延迟任何JS的执行,直到用户实际请求该页面为止?

3 个答案:

答案 0 :(得分:7)

我刚刚对此做了一些研究:

Prefetch将加载顶级资源,通常只是HTML页面

Prerender也将获取子元素,并将执行Javascript代码。使用Page Visibility API,我们可以确定加载页面的当前可见性状态。

所以答案是肯定的,只要用户在Chrome上并且正在使用预渲染,它就会执行JS。此外,当前版本的Google Analytics充分利用了页面可见性API,因此统计数据不会出现偏差,但是,由于未正确处理预渲染案例,很可能会出现大量代码存在偏差的情况。

答案 1 :(得分:1)

不,预取只是缓存文件,它不会执行它包含的javascript。

据我所知,analytics.js在您提出要求时不会对网站进行分析。它在javascript执行时有效。当浏览器预取(请求)analytics.js文件时,并不意味着执行analytics.js文件。因此,在用户实际请求页面之前,您的网站的Google Analytics数据不会受到预取方法的影响。

答案 2 :(得分:1)

关于主题the spec是静音,只是声明:

  

prefetch关键字表示抢占式获取和缓存   指定的资源可能是有益的,因为它是高度的   可能是用户需要此资源。

由此我们可以说在预取页面中执行JS是 undefined

浏览器供应商是否看到在预取页面中执行JS的好处取决于供应商。