JS异步加载的三种实现方式
js加载的缺点:加载工具方法没必要阻塞文档,过多js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。 有些工具方法需要按需加载,用到再加载,不用不加载,。
默认正常模式下下,JS是同步加载的,即优先加载JS,只有当JS文件下载完,dom和css才开始加载,当某些时候我们需要JS异步加载,我们可以通过以下方式来设置异步加载,不同情况下选取不同方式即可
1.defer:defer
- JS异步下载,dom结构解析完(标签 + 样式(内容不一定下载完))才异步执行
- 仅IE能用
- 内部JS也能用该属性
- 异步加载js不允许使用document.write,因为document.write会清除文档流,js标签还未加载就会被清除
- document.write()可用于初始化页面
2.(h5)async:async(asynchronous) ajax(asynchronous javascript and XML)
- JS异步加载,加载完毕后立刻异步执行
- IE8及以下不兼容
- 内部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); }
(资源库 www.zyku.net)
您可能感兴趣的文章
- 04-04php实现用户登录简单实例
- 03-17thinkPHP5.0框架环境变量配置方法
- 07-05Linux vlock命令
- 01-25Python基础之logging模块知识总结
- 10-31小米手机如何分享wifi密码
- 03-01华为运动耳机配对蓝牙方法
- 03-31opporeno5k加密相册设置方法
- 07-03PHP使用explode需要注意的问题(空字符
- 03-14WordPress提示require_once() Failed
- 01-13ipad开启扫码器教程
- 10-14苹果13pro拍摄prores视频方法介绍
- 12-26恋爱手册-恋爱手册应用软件功能介绍
- 01-17千万女神答题-千万女神答题应用软件功
- 11-21苹果手机隐藏相册怎么找
- 11-01小米civi启用通知亮屏教程分享
- 09-18WEB形成跨域的几种情况
- 03-28荣耀v40护眼模式开启教程
- 09-15网易云音乐一起听和好友对话教程介绍
- 12-30KBS幼教系统-KBS幼教系统应用软件功能
- 01-16杀毒安全王-杀毒安全王应用软件功能介
最近更新
阅读排行
猜你喜欢
- 09-18微信视频号点赞动态查询教程
- 09-21小米穿戴上线四大学院样式一览
- 02-18AJAX用于判定用户是否注册
- 07-15帝国CMS教程:灵动标签调用字段大全
- 09-23safari扩展添加步骤分享
- 04-27opporeno5pro设置闪回键指南教程
- 03-18iqooneo5活力版手机投屏方法
- 03-17opporeno6pro设置简体中文教程
- 03-03华为手环6更换表盘操作教程
- 09-18OPPOreno6怎么拦截垃圾短信