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)
您可能感兴趣的文章
- 12-27vivox70pro+如何关闭语音助手
- 09-23iMessage内容置顶方法分享
- 12-19HTML <img> 标签
- 10-28苹果13pro如何设置屏幕刷新率
- 09-06鼠标点击input框时,全选input框内所有
- 07-04JavaScript中三个等号和两个等号你了
- 11-18微信怎样关闭网易云扣费服务
- 09-28腾讯视频怎么屏蔽通知消息
- 10-13苹果手机如何解绑丢失手表
- 12-01小米手机怎么设置早间新闻播报
- 10-15小米真无线降噪耳机3pro如何绑定手机
- 04-16DedeCms后台登录一片空白的解决方法
- 02-24Linux中解决vi/vim显示中文乱码的问题
- 07-04帝国CMS7.5版多访问端新增静态页面同
- 07-27PHP自定义函数判断是否为Get、Post及A
- 05-11修改CSS样式实现网页变灰色/黑白代码
- 09-19华为watch3pro开通esim流程分享
- 03-19SSL免费证书已更新为Let's Encrypt R3
- 11-19腾讯地图使用LOL 暴走萝莉金克丝导航
- 02-29FastAdmin中代码和服务器安全建议分享

最近更新
阅读排行
猜你喜欢
- 03-24telnet不是内部或外部命令,也不是可运
- 09-27vivox70pro+在哪里开护眼模式
- 11-02vivo手机游戏中心如何修改实名认证
- 02-19redis配置认证密码的方法
- 10-21苹果13怎样取消轻点唤醒
- 10-09企业微信如何进行接龙
- 04-22Docker容器和主机如何互相拷贝传输文
- 04-16Dedecms登录后台出现Call to undefine
- 02-20Debian安装MySQL以及设置远程连接的方
- 12-06探讨安装debian和Ubuntu哪个系统镜像