预防阻塞的方法

来源:互联网 发布:mysql ifnull 编辑:程序博客网 时间:2024/04/29 09:57

大多数浏览器都使用单一进程来处理用户界面(UI)更新和JavaScript脚本执行
当浏览器在执行JavaScript代码时,会阻塞页面后续的内容(包括页面的渲染、其它资源的下载)

• 脚本的位置

浏览器加载HTML的顺序是从上到下的

由于脚本会阻塞页面其他资源的下载,因此建议将所有的<script>标签尽可能放到<body> 标签的底部,以尽量减少对整个页面下载的影响。

• 合并脚本

通过在线打包工具(Apache ant)

由于每个<script>标签初始下载时都会阻塞页面渲染,所以应该尽量减少<script>标签页面中的<script>标签越少,加载也就越快,响应也更迅速

• 无阻塞的脚本

在页面加载完成后才加载JavaScript代码在window 对象的load事件触发后再下载脚本

延迟的脚本 defer

<script src='file.js' defer='defer'>  (HTML5)

defer 对指定脚本执行进行延迟,直到文档加载完成

任何带有defer属性的<script>元素在DOM完成加载之前都不会被执行defer 属性仅适用于外部脚本(只有在使用 src 属性时)

async=”async”:脚本相对于页面的其余部分异步地执行
(当页面继续进行解析时,脚本将被执行)
仅适用于外部脚本(只有在使用 src 属性时)

动态脚本元素

<script>            var script=document.createElement('script');            script.src='./index.js';            document.getElementsByTagName('head')[0].appendChild(script);        </script>        <h1>Felix</h1>

无论何时启动下载,文件(index.js)的下载和执行过程都不会阻塞页面的渲染

使用动态注入,在index.js脚本中使用document.write()不能得到想要的结果

XMLHttpRequest脚本注入

var xhr = new XMLHttpRequest();xhr.open('GET','./file1.js',true);xhr.onreadystatechange=function(){    if(xhr.readyState==4){        if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){            var script = document.createElement('script');            script.type='text/javascript';            script.text='xhr.responseText';            document.body.appendChild(script);        }    }};
这种方法的优点是,可以下载JavaScript代码但不立即执行。由于代码是在<script>标签之外返回的,因此它下载后不会自动执行,这使得可以把脚本的执行推行到准备好的时候。另一个优点是,同样的代码在所有主流浏览器中都能正常工作

window是web中的顶级对象,可以理解成浏览器窗口
document是window中的一个对象
页面加载过程中先有document.readyState=’completed’,再有window.onload

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安卓的se已禁用怎么办 刚拿到驾照没车怎么办 驾驶证过期了6年怎么办 驾驶证过期7个月怎么办 驾驶换证过期了怎么办 和喜欢的人聊天冷场怎么办 老公和小三有了小孩怎么办 战网账号忘记了怎么办 战网邮箱忘了怎么办 捷信分期逾期了怎么办 欠捷信7万还不了怎么办 苹果6s阴阳屏怎么办 碰到碰瓷的人怎么办 如果遇到碰瓷的怎么办 对交通事故责任认定书不服怎么办 违停15天没处理怎么办 衣服反光条掉了怎么办 脸过敏起小疙瘩怎么办 过敏怎么办怎么好得快 眉毛在眉骨下面怎么办 踩到地雷怎么办知乎 在边境踩到地雷怎么办 插在花泥里的花怎么办 瓶插绣球花蔫了怎么办 水养绣球花蔫了怎么办 鲜切绣球花蔫了怎么办 崩坏2仓库满了怎么办 dnf88级没任务了怎么办 0号柴油冻住了怎么办 不小心喝了生水怎么办 不小心吃了蟑螂怎么办 以租代购还不起怎么办 孩子被教官打了怎么办 三岁宝宝叛逆期怎么办 三岁宝宝很叛逆怎么办 孩子不听话怎么办有什么方法呢 打了三岁的宝宝怎么办 2岁半宝宝不听话怎么办 心里素质不好容易紧张怎么办 孩子二年级成绩差怎么办 遇到素质低的人怎么办