html首页源码_从Vue生产代码index.html看prefetch和preload

8e47f0d385b52442bf1f1e281d85ab56.png

生产代码index.html示例

以下是一张执行了npm run build之后的index.html的源码。可以看到,除了最后一个rel是preload,其余的都是prefetch。可以看出Vue cli使用preload和prefetch来改善性能。

5d4c1de0c6a3dc0bd93cf934df2b5386.png

preload

通常在页面中我们需要加载脚本和样式,preload可以对当前页面所需要的脚本、样式等资源进行预加载,而无需等到解析到script和link标签时才进行加载。这一机制使得资源可以更早的得到并可用,且不易阻塞页面的初步渲染,进而提升性能。

prefetch

prefetch和preload一样都是对资源进行预加载,但是prefetch加载的资源一般不是用于当前页面,而是其他页面用到的资源。prefetch不会像preload一样,在页面渲染的时候加载资源,而是等浏览器空闲下来的时候再去下载。当真正打开对应页面时,直接从缓存中取,既不影响当前页面的渲染,又提高了其他页面加载和渲染的速度。

网络请求对比

对于如下源码:

<link href="app.js" rel="preload" as="script>

首页加载时的一个真实网络请求为:

0a9ddfa05caccedc535adf259c4d5126.png

可以看出传输了5.8M,资源加载了5.8M。

对于如下源码:

<link href="app.js" rel="preload" as="script>

首页加载时的一个真实网络请求为:

c0dee2b52fd0fd018bb5f4404b817bcc.png

可以看出传输了5.8M,资源加载了0。

当真正用到这个资源的网页打开时,资源才会从缓存里面加载。