第二章
如何避免引用的外部网站的js文件不会是恶意的js文件,使用javascript标签的integrity属性可以避免,但不是所有浏览器都支持。
defer属性代表,遇到javascript标签,会进行异步下载js文件,等html解析完成才会执行js文件
async属性代表,如果遇到了javascript标签,会异步下载文件,html继续渲染,但是如果js文件下载完了就会马上执行js文件,如果没下载完js文件就会继续渲染html,这个根据js文件的下载速度和网络速度决定,有可能html渲染结束了,js文件才下载结束。
js的代码会执行完前面一个标签内的js才会执行下个《script》标签内的代码,以此类推
现代web的应用程序通常会把所有的javascript的引用放在body标签后面,先让页面显示出来,让用户感觉很快。
2.1.2,书上说使用了feber属性的js会按照顺序执行,并且在HTML已经完全加载和解析后的DOMContentLoaded之前进行执行,但是推迟的不一定按照顺序执行,因为有的浏览器支持这个属性,有的浏览器不支持这个属性,就会忽略这个属性,所以可能在不同的浏览器就会执行的顺序不一样。
2.1.3异步执行脚本:意思是用async属性,js不排队一样执行,而是遇到了大家各走一条路,就像游戏的主线任务(HTML),和支线任务(异步加载)一样,如果在后面发现了后面的《script》内没有这个属性的代码,也不会影响到,除非async得到的代码速度很快。不要在异步里面操作还在加载的DOM元素,因为要操作的DOM元素还没出现。
2.1.4动态加载脚本:可以用创造元素的方式配合链(.实心的点就是链)的方式点上src来确定文件,再插入到body元素后面,但是再添加到DOM之前不会执行js文件请求,所以也和async类似,,但是有的浏览器不认识,所以最好是统一动态脚本的加载行为,所以书中说将它设置为false,不认识它的忽略它,当成同步,认识它的设置成false。这样请求的资源对浏览器的预加载器是不可见,需要加上《link rel=“preload” href=“”》,代表的是和文本的关系是预加载,地址是。。。