码迷,mamicode.com
首页 > Web开发 > 详细

js的异步加载及promise的三种状态

时间:2017-06-19 16:23:56      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:方式   element   创建   style   --   defer   text   过程   不同的   

---恢复内容开始---

js异步加载

同步加载

<script src="http://baidu.com/script.js"></script>  --->  我们平时经常使用的就是这种同步加载的形式
 
同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。
 js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。
以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。
 

异步加载

异步加载有几种方式,现在介绍以下两种常用的

  1. async: async的定义和用法(是HTML5的属性) 
    async 属性规定一旦脚本可用,则会异步执行。 
    示例: 
<script type="text/javascript" src="demo_async.js" async="async"></script> 

 


注:async 属性仅适用于外部脚本(只有在使用 src 属性时)
注:有多种执行外部脚本的方法: 

 

    • 如果不使用 async 且 defer="defer":脚本将在页面完成解析时执行 
    • 如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行) 
    • 如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本 

   2.创建js脚本,插入到DOM中,加载完毕后进行callBack,例:

function loadScript(url, callback){ 
var script = document.createElement_x("script") 
script.type = "text/javascript"; 
if (script.readyState){ //IE 
script.onreadystatechange = function(){ 
if (script.readyState == "loaded" || 
script.readyState == "complete"){ 
script.onreadystatechange = null; 
callback(); 
} 
}; 
} else { //Others: Firefox, Safari, Chrome, and Opera 
script.onload = function(){ 
callback(); 
}; 
} 
script.src = url; 
document.body.appendChild(script); 
} 

 

promise的三种状态

 promise我还似懂非懂,目前只知道有三种状态可以在不同的时候调用,以后实际过程中遇到我会再补充。

就酱,以上。

 

 

 

 
 

js的异步加载及promise的三种状态

标签:方式   element   创建   style   --   defer   text   过程   不同的   

原文地址:http://www.cnblogs.com/yujiekangweb/p/7049163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!