美文网首页
2018-10-11(浏览器加载js的阻塞&非阻塞)

2018-10-11(浏览器加载js的阻塞&非阻塞)

作者: 长剑如歌 | 来源:发表于2018-10-11 14:47 被阅读0次

    1、js在浏览器中的阻塞

    常规理解就是浏览器在加载js时候会阻塞浏览器的渲染操作,但页面性能决定不希望我们在加载js的时候影响页面的渲染,所以我们经常会把js文件放到</body>之前去加载。而不会把它放在head里去阻塞页面的渲染。那么问题来了,如果我们把js放在head里,浏览器是怎么去执行它的呢,是按顺序加载还是并行加载呢?

    其实在旧的浏览器下,都是按照先后顺序来加载的,这就保证了加载的js依赖不会发生问题。但是新的浏览器已经开始允许并行加载js了,也就是说我可以同时下载js文件,但是还是按先后顺序执行文件的。

    2、如何实现js非阻塞

    1.在html5中,script新增了async的属性,script添加了该属性之后,下载脚本时将可以与页面其他内容并行下载,但是该属性必须在ie9以上的浏览器中才可以使用,并且只能用于加载外部js脚本。

    2.同样,在html4中也有一个defer属性,该属性的兼容性更好一点,但是与async一样,可以让js脚本实现异步加载,同样只能用于加载外部js脚本。

    备注:
    asyc与defer属性的不同点是,async会让脚本在加载完可用时立即执行,并且使用async的<script>标签是不按他们在HTML中的排列顺序执行的;
    而defer脚本则会在dom加载完毕后执行,defer脚本的执行会在window.onload之前,其他没有添加defer属性的script标签之后。使用defer的<script>标签是按照他们排列的顺序执行的
    当defer和async同时存在时,会忽略defer而遵循async。且使用defer和async的脚本禁止使用document.write方法哦。

    3.动态加载js,通过appendChild(script)这种方式去异步加载js了

    相关文章

      网友评论

          本文标题:2018-10-11(浏览器加载js的阻塞&非阻塞)

          本文链接:https://www.haomeiwen.com/subject/lmebaftx.html