厦门网站介绍在这里绍preload的使用,以及与prefetch的区别。然后会聊聊浏览器的加载优先级。
如何使用preload
如我们常用到的antd会依赖一个cdn上的font.js字体文件,我们可以设置为提前加载,以及有一些模块虽然是按需异步加载,但在某些场景下知道其必定会加载的,则可以设置preload进行预加载,如:
目前我们支持的浏览器主要为高版本Chrome,所以可放心使用preload技术。其他环境在caniuse.com上查到的支持情况如下:在不支持preload的浏览器环境中,会忽略对应的link标签,而若需要做特征检测的话,则:
preload是确认会加载指定资源,如在我们的场景中,x-report.js初始化后一定会加载PcCommon.js和TabsPc.js,则可以预先preload这些资源;
prefetch是预测会加载指定资源,如在我们的场景中,我们在页面加载后会初始化首屏组件,当用户滚动页面时,会拉取第二屏的组件,若能预测用户行为,则可以prefetch下一屏的组件。
使用preload前,在遇到资源依赖时进行加载:使用preload后,不管资源是否使用都将提前加载:可以看到,preload的资源加载顺序将被提前:
使用preload后,Chrome会有一个警告:
如上文所言,若不确定资源是必定会加载的,则不要错误使用preload,以免本末倒置,给页面带来更沉重的负担。
当然,可以在PC中使用preload来刷新资源的缓存,但在移动端则需要特别慎重,因为可能会浪费用户的带宽。
preload和prefetch混用的话,并不会复用资源,而是会重复加载。
使用preload和prefetch的逻辑可能不是写到一起,但一旦发生对用的资源preload或prefetch的话,会带来双倍的网络请求,这点通过Chrome控制台的网络面板就能甄别:
若css中有应用于已渲染到DOM树的元素的选择器,且设置了@font-face规则时,会触发字体文件的加载。而字体文件加载中时,DOM中的这些元素,是处于不可见的状态。对已知必加载的font文件进行预加载,除了有性能提升外,更有体验优化的效果。
在我们的场景中,已知antd.css会依赖font文件,所以我们可以对这个字体文件进行preload:
然而我发现这个文件加载了两次:
原因是对跨域的文件进行preload的时候,我们必须加上crossorigin属性:
再看一下网络请求,就变成一条了。
W3规范是这么解释的:
那为何会有两条请求,且优先级不一致,又没有命中缓存呢?这就得引出下一个话题来解释了。
我们先来看一张图:
这张图表示的是,在Chrome46以后的版本中,不同的资源在浏览器渲染的不同阶段进行加载的优先级。在这里,我们只需要关注DevToolsPriority体现的优先级,一共分成五个级别:
CSS(match)指的是对已有的DOM具备规则的有效的样式文件。
前三个js文件是写死在html中的静态资源依赖,后三个js文件是根据首屏按需异步加载的组件资源依赖,这正验证了这个规则。
css样式文件中有一个@font-face依赖一个font
标签: 网页设计、 网站开发、 网站建设、 厦门网站设计、 厦门网站制作、 网站建设、 厦门设计公司、 网站制作、 网站欣赏、 厦门网站建设公司、 用、 厦门网页设计、 网站设计、 网页UI设计、 preload、 预加载页面资源、 网站制作、 厦门网站建设、 网站设计、本文地址: https://yihaiquanyi.com/article/3c7f4108dbdc364df87b.html
上一篇:用户体验ux就业前景用户体验UX你是如何跟踪...