-
Notifications
You must be signed in to change notification settings - Fork 88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
性能优化之 Preload #4
Comments
😄. 我试试吧。 |
认领了这么久,也该写点文字来着。
规范地址: https://w3c.github.io/preload/
相关概念
属性
使用场景加载非标签资源主要指藏在 CSS 或 JS 中的资源, as 则可以指明资源类型,因为浏览器不知道的类型往往加载优先级较低。 <!--
参见:https://fetch.spec.whatwg.org/#concept-request-destination
-->
<link rel="preload" href="late_discovered_thing.js" as="script"> 加载字体加载字体规则异常复杂,有些重要的字体等到真正加载的时候已经晚了。 <link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin> 只加载不执行一般用于加载 JS 文件 var link = document.createElement("link");
link.href = "myscript.js";
link.rel = "preload";
link.as = "script";
document.head.appendChild(link); 基于标签的异步加载<link rel="preload" as="style" href="async_style.CSS" onload="this.rel='stylesheet'"> 响应式加载<link rel="preload" as="image" href="map.png" media="(max-width: 600px)">
<link rel="preload" as="script" href="map.js" media="(min-width: 601px)"> 注意事项
参考这里分享就是对其进行简单的总结: 下次探讨内容预告
|
关于标准
Why Preload在开发中,很多人碰到过这样的情况,有些资源虽然不会立即执行,但是希望需要尽早获取,要是等到需要用时再去加载,需要晚点加载的原因是如依赖管理、条件加载、加载顺序控制等等。在之前,你要做到这些,是需要有额外的性能花费的。
Preload 则很好的解决了这些问题:
使用示例<!-- 通过标签加载 -->
<link rel="preload" href="/styles/other.css" as="style">
<!-- 通过 JS 动态插入 -->
<script>
var res = document.createElement("link");
res.rel = "preload";
res.as = "style";
res.href = "styles/other.css";
document.head.appendChild(res);
</script> 加载资源的时机开发者
浏览器如果 href 属性被重置,浏览器当立即停止当前加载,浏览需要做的一些动作可以分为以下几个步骤:
一些要求
资源加载完成浏览器需要有以下几个动作
Link 元素接口拓展这小结反复强调 as 的重要性,不指定 as 就用不上 Preload partial interface HTMLLinkElement {
[CEReactions] attribute DOMString as;
}; as 必须是准确无误,否则 preload 无法正确执行相关逻辑,具体可以参考上篇中所述的特性
Server Push( HTTP2 )上次探讨我们说到, Preload 和 HTTP/2 Server Push 其实是相辅相成的,事实上, <link rel="preload" href="/app/style.css" as="style" nopush>
<link rel="preload" href="/app/script.js" as="script" nopush> 非规范内容(未完待续) 下次探讨内容预告
参考 |
var preload = document.createElement("link");
link.href = "myscript.js";
link.rel = "preload";
link.as = "script"; 这个是不是写错了?link应该改成preload? |
认领人须知
The text was updated successfully, but these errors were encountered: