回到顶部 目录
[](
)什么是异步(Asynchronous)加载?
异步加载又叫非阻塞加载,浏览器在下载执行js的同时,还会继续进行后续页面的处理
- 代码执行时间:当整个网页解析完,执行代码(在网页而加载完之前)
[](
)主要有三种方式:
-
Script DOM Element(
<async>
属性是HTML5中新增的异步支持)浏览器部分不支持<script async></script>
(function(){ var scriptEle = document.createElement('script'); scriptEle.type = "text/javascript" scriptEle.async = true; scriptEle.src = "xxx.js"; var head = document.getElementsByTagName("head")[0]; head.insertBefore(scriptEle, head.firstChild); })();
-
加载完就执行,只能加载外部脚本 W3C的标准
-
该加载方式执行完之前会阻止onload事件的触发,而现在很多页面的代码都在onload时还执行额外的渲染工作,所以还是会阻塞部分页面的初始化处理
-
如果有多个声明了async的脚本,其下载和执行也是异步的,不能确保彼此的先后顺序
- async会在load事件之前执行,但并不能确保与DOMContentLoaded的执行先后顺序
-
-
IE专用(IE9以下) (defer)
<script defer></script>
(function(){ var scriptEle = document.createElement('script'); scriptEle.type = "text/javascript" scriptEle.defer = true; scriptEle.src = "xxx.js"; var head = document.getElementsByTagName("head")[0]; head.insertBefore(scriptEle, head.firstChild); })();
-
defer适用于外联脚本,如果script标签没有指定src属性,只是内联脚本,尽量不要使用defer (虽然IE4-IE7还支持对嵌入脚本的defer属性,但在IE8及之后的版本就只支持外部脚本,对不支持的会直接忽略defer属性)
-
如果有多个声明了defer的脚本,则会按顺序下载和执行
-
defer脚本会在DOMContentLoaded和load事件之前执行
- 使浏览器延迟脚本的执行,直到浏览器解析和渲染完页面
-
-
自己写一个把
<script>
标签插入到网页的最后面// 异步载入并执行脚本 function loadasync(url){ // 找到head标签 var head = document.getElementsByTagName('head')[0]; // 创建一个script元素 var s = document.createElement('script'); // 设置引入地址 s.src = url; // 插入到head标签中 head.appendChild(s); }
- 注意这个loadasync()函数会动态的载入脚本–脚本载入到文档中,成为正在执行的JavaScript程序的一部分,既不是通过web页面内联包含,也不是来自web页面的静态引用
[](
)解决异步加载的带来的影响方法
-
利用定时器的延时
// 异步的过程 var script = document.createElement("script"); script.src = "test.js"; document.head.appendChild(script); setTimeout("test()", 1000);
- 弊端就是不知道准确时间
-
加载事件onload
window.onload = function(){ test(); }
- 低版本的IE可能不支持,并且效率太慢
-
咱自己写一个
// url: 地址 // callback: 回调函数 function loadScript(url, callback){ var scriptEle = document.createElement('script');
基础学习:
前端最基础的就是 HTML , CSS 和 JavaScript 。
网页设计:HTML和CSS基础知识的学习
HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/150918.html