8
<!—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),预渲染/预取是否会在页面上执行 Javascript?或者它会延迟 JS 的任何执行,直到用户实际请求页面?

4

3 回答 3

7

我刚刚对此进行了更多研究:

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

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

所以答案是肯定的,只要用户在 Chrome 上并且正在使用 prerender,它就会执行 JS。此外,当前版本的 Google Analytics(分析)充分利用了 Page Visibility API,因此统计数据不会出现偏差,但是很可能有很多代码由于未正确处理预渲染的情况而导致统计数据出现偏差。

于 2012-05-15T15:52:59.653 回答
2

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

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

于 2012-05-15T15:31:09.240 回答
1

在这个主题上,规范是沉默的,只是简单地说:

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

由此我们可以说 JS 在预取页面中的执行是未定义的。

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

于 2012-05-15T15:36:54.683 回答