本文章总结 https://github.com/thedaviddias/Front-End-Checklist
内部,非原创性内容。css
npx size-limit --why
查看占用状况(https://evilmartians.com/chronicles/size-limit-make-the-web-lighter),至关于 vue 提供的 report 选项。即将进行解析的域名进行获取html
<link rel="dns-prefetch" href="https://example.com">
对于即将请求的服务提早进行 DNS 查找, TCP 握手和 TLS 协商前端
<link rel="preconnect" href="https://example.com">
<link rel="prefetch" href="image.png">
要在 body 中加载的进行提早加载vue
<link rel="preload" href="app.js">
本部分提取 https://medium.com/reloading/preload-prefetch-and-priorities-in-chrome-776165961bbf 的主要内容git
prefetch 和 preload 区别: preloading 是声明未获取,会强制浏览器发起请求进行加载,不会阻塞文档的 onload 事件。 prefetch 则是告诉浏览器该资源可能用到,由浏览器决定什么时候获取。github
preload 可提高 10% 交互时间,web
preload 资源仅限于该资源加载的可能性很是高时,prefetch 用于未来可能被使用时。chrome
chrome 有四种策略: HTTP 缓存,内存缓存,service Worker 缓存,和Push 缓存。两种资源最终均使用 HTTP 缓存浏览器
是否最终缓存取决于缓存策略。缓存
preload 使用 as 会和对应的类型加载优先级相同,不然会优先于 XHR。具体优先级可在 devtools 中添加priority 列。
图片(在当前视图中的)在加载过程当中是有相对比较高的优先级,因此最好对图片实行懒加载。
使用 preload 或 prefetch ,可能会致使浪费带宽,尤为是没有设置资源缓存的时候。
chrome 在使用 preload 加载脚本,但3秒内没有使用它时会有警告。
最后要注意: 不要给全部资源添加 preload,只为最近要加载的资源设置。
这个取决于你服务器有多少资源要加载和你用户的带宽以及其余的一网络情况。
极可能用到的请使用 preload,其余重要的使用 prefetch。对于 script 来说,preLoad 关键的 bundle 比使用 <script async></script>
要好的多,同时你能够 preload 图片、样式,字体、媒体等。须要本身明确你页面中最早用到哪一个资源。
chrome 中,若是用户从一个页面中 prefetch 了一个资源,跳转到新页面时还会在 flight 状态,请求不会结束。另外, prefetch 的资源不论是否设置了缓存,都会在 net-stack 中缓存至少 5 分钟。
rel=preload
或者 preload 的header 有什么区别?preload 是和 js 处理执行是解耦的,preload 标记会被 chrome 扫描,也就无论 preload 标签在 HTML 什么问题,都会被提早捕获。这种实现比 js 实现更为强大
使用 push 的状况在于你知道确切的资源加载顺序,有 service worker 来拦截可以被缓存的请求。preload 可以将开始下载的时间提早到最开始的 request,不论是否为第三方资源。
这种要根据特性来, preload 在于和执行解耦,且有缓存策略,它的执行不会阻止执行其余内容。
push 不能使用第三方,直接下发资源对于浏览器来说回路更短,但它只在你明确知道你在作什么的时候才能提升性能。
请求头的方式:
Link: <https://example.com/other/styles.css>; rel=preload; as=style
区别在于:使用 headers 时可能会触发 HTTP2。使用 tag 不会触发 push.
const preloadSupported = () => { const link = document.createElement('link'); const relList = link.relList; if (!relList || !relList.supports) return false; return relList.supports('preload'); };
preLoad 是基于异步的载入,能够在 onload 时设置
<link rel="preload" href="style.css" onload="this.rel=stylesheet">
用于加载 web 字体,异步加载 css,当前页的 js 脚本加载
preload 支持 50%, prefetch 70%, 可参考 can i use
清理注释,压缩 HTML