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

Javascript Rel PreRender/PreFetch,是否执行JS?,javascript,preloading,prefetch,prerender,Javascript,Preloading,Prefetch,Prerender,如果我在页面上有Javascript来预呈现/预回迁(比如Google Analytics JS),预呈现/预回迁会在页面上执行Javascript吗?或者它会延迟JS的执行直到用户实际请求页面吗?不,预取只是缓存文件,它不会执行它包含的javascript 据我所知,analytics.js不会在您请求时分析网站。当javascript被执行时,它就会工作。浏览器预取(请求)analytics.js文件时,并不意味着执行analytics.js文件。因此,在用户实际请求页面之前,您网站的Goo

如果我在页面上有Javascript来预呈现/预回迁(比如Google Analytics JS),预呈现/预回迁会在页面上执行Javascript吗?或者它会延迟JS的执行直到用户实际请求页面吗?

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

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

主题为静音,仅说明:

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

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


浏览器供应商是否认为在预取页面中执行JS会带来好处取决于供应商。

我刚刚对此做了更多的研究:

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

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


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

刚刚做了一些进一步的研究,并亲自回答了这个问题,值得注意的是,prefetch和prerender的行为非常不同。我刚刚发现prefetch只加载顶级元素,prerender将获取所有子元素并执行JS。实际上,它们是故意不同的命令
prefetch
可用于您希望预取的资源(脚本、图像、html文件等),而
prerender
用于预呈现一个完整的页面,您(希望)知道该页面下一步很可能会被您的用户访问,而且很快就会被用户访问。例如,可以是论坛的登录页面,或者类似的东西预取预渲染。(尽管查看caniuse.com获取最新支持…)您是否有来自谷歌的官方消息称谷歌分析知道如何忽略预取点击?
<!—Firefox Prefetching -->
<link rel="prefetch" href="http://www.example.com/page2.html">

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