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

发布时间 - 2026-01-11 00:12:40    点击率:

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);
}

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


# js实现异步加载  # js异步加载  # js异步加载的方式  # JavaScript文件的同步和异步加载的实现代码  # 详解JS异步加载的三种方式  # 浅析JS异步加载进度条  # JavaScript 脚本异步加载的几种实现方法  # 加载  # 写到  # 下载完  # 就会  # 文档  # 有可能  # 才会  # 两种  # 也能  # 我们可以  # 而不  # 还未  # 不能用  # 没必要  # 再加  # 几句话  # 大家多多  # 要写  # 到该  # 按需 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京的网站制作公司有哪些,哪个视频网站最好?  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel如何与Inertia.js和Vue/React构建现代单页应用  如何在IIS中新建站点并解决端口绑定冲突?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  公司门户网站制作流程,华为官网怎么做?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  原生JS获取元素集合的子元素宽度实例  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何处理CORS跨域请求?(配置示例)  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何用搬瓦工VPS快速搭建个人网站?  JavaScript如何实现音频处理_Web Audio API如何工作?  如何用景安虚拟主机手机版绑定域名建站?  nodejs redis 发布订阅机制封装实现方法及实例代码  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何使用Telescope进行调试?(安装和使用教程)  动图在线制作网站有哪些,滑动动图图集怎么做?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  JavaScript如何实现类型判断_typeof和instanceof有什么区别  如何在阿里云完成域名注册与建站?  EditPlus中的正则表达式 实战(1)  公司网站制作需要多少钱,找人做公司网站需要多少钱?  javascript中的try catch异常捕获机制用法分析  高防服务器租用如何选择配置与防御等级?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  高端云建站费用究竟需要多少预算?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Internet Explorer官网直接进入 IE浏览器在线体验版网址  网站制作报价单模板图片,小松挖机官方网站报价?  如何在IIS服务器上快速部署高效网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  ,怎么在广州志愿者网站注册?  Android仿QQ列表左滑删除操作  javascript中对象的定义、使用以及对象和原型链操作小结  浅述节点的创建及常见功能的实现  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何在局域网内绑定自建网站域名?  装修招标网站设计制作流程,装修招标流程?  Python面向对象测试方法_mock解析【教程】  制作电商网页,电商供应链怎么做?