JS异步加载的三种实现方式


Posted in Javascript onMarch 16, 2017

js加载的缺点:加载工具方法没必要阻塞文档,过多js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。 有些工具方法需要按需加载,用到再加载,不用不加载,。

默认正常模式下下,JS是同步加载的,即优先加载JS,只有当JS文件下载完,dom和css才开始加载,当某些时候我们需要JS异步加载,我们可以通过以下方式来设置异步加载,不同情况下选取不同方式即可

1.defer:defer

  1. JS异步下载,dom结构解析完(标签 + 样式(内容不一定下载完))才异步执行 
  2. 仅IE能用
  3. 内部JS也能用该属性
  4. 异步加载js不允许使用document.write,因为document.write会清除文档流,js标签还未加载就会被清除
  5. document.write()可用于初始化页面

2.(h5)async:async(asynchronous) ajax(asynchronous javascript and XML)

  1. JS异步加载,加载完毕后立刻异步执行
  2. IE8及以下不兼容
  3. 内部JS不能用该属性

3.除了以上两种方法,还有一种兼容自己封装的异步加载方式,即动态添加script标签也能实现异步加载。

function asyncLoaded(url,callBack){/*url为js的链接,callBack为url的js中的函数(该函数调用应该写到匿名函数中,如function(){console.log(div.getScrollOffset())})*/
  var script = document.createElement('script');
  script.type = 'text/javascript';
  /*if else 这几句话必须要写到这位置处,不能放最后,因为if中js加载中script.readyState存在好几种状态,
  只有状态改变‘readystatechange'事件才会触发,但现在浏览器加载速度很快,当解析到该事件时JS有可能已经加载完,
  所以事件根本不会触发,所以要写到前面*/
  if(script.readystate){//兼容IE
    script.onreadystatechange = function() {//状态改变事件才触发
      if(script.readyState == 'loaded' || script.readyState == 'complete'){  
        callBack();
        script.onreadystatechange = null;    
      }
    }
  }else{
    script.onload = function(e){
      callBack();
    }
  }    
  script.src = url;
  document.body.appendChild(script);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 对象比较实现代码
Apr 27 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
Aug 15 Javascript
jQuery菜单插件superfish使用指南
Apr 21 Javascript
JQuery鼠标移到小图显示大图效果的方法
Jun 10 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
javascript jquery对form元素的常见操作详解
Jun 12 Javascript
confirm确认对话框的实现方法总结
Jun 17 Javascript
纯JS实现表单验证实例
Dec 24 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 Javascript
JS中箭头函数与this的写法和理解
Jan 14 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 #Javascript
基于JavaScript实现滑动门效果
Mar 16 #Javascript
基于Vue2.0的分页组件
Mar 16 #Javascript
原生js实现验证码功能
Mar 16 #Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 #Javascript
vue图片加载与显示默认图片实例代码
Mar 16 #Javascript
js中作用域的实例解析
Mar 16 #Javascript
You might like
用PHP实现登陆验证码(类似条行码状)
2006/10/09 PHP
php中的一个中文字符串截取函数
2007/02/14 PHP
php 邮件发送问题解决
2014/03/22 PHP
php上传图片类及用法示例
2016/05/11 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
python实现人脸识别代码
2017/11/08 Python
python读取文件名称生成list的方法
2018/04/27 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
客户表扬信范文
2014/01/10 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
运动会口号大全
2014/06/07 职场文书
班级心理活动总结
2014/07/04 职场文书
公民授权委托书范本
2014/09/17 职场文书
普通党员个人对照检查材料
2014/09/18 职场文书
招商引资工作汇报
2014/10/28 职场文书