美文网首页
关于JS异步和延迟

关于JS异步和延迟

作者: 沉沉___ | 来源:发表于2019-01-26 21:52 被阅读0次

    <script>标签位置:

    按照传统做法,所有 <script> 元素都应该放在页面的 <head> 元素中,例如:


    这种做法目的就是把所有的外部文件(包括css文件和JS文件)的引用都放在相同的地方。可是在文档的head元素中包含所有JS文件,意味着必须等到全部JS代码都被下载、解析和执行完成以后,才能呈现页面的内容(浏览器在遇到body标签是才开始呈现内容)。这样就会导致浏览器在呈现页面时出现明显的延迟,而延迟期间浏览器窗口将是一片空白,所以为了避免这个问题,把Jscript引用放在body元素中页面内容的后面,例如:

    这样在解析包含的Jscript代码之前,页面内容将会完全呈现在浏览器中。
    注:无论如何包含代码,只要不存在defer和async属性,浏览器都会按照<script>元素再页面中的出现的先后顺序对其依次解析。

    延迟脚本(为<script>标签定义defer属性)

    JS脚本会被延迟到整个页面都解析完毕后再运行,因此在<script>元素中设置defer属性相当于告诉浏览器立即下载,但延迟执行。只适用于外部文件。


    在例子中,虽然把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟到浏览器遇到</html>标签后再执行

    异步脚本(为<script>标签定义async属性)

    和defer作用类似,不同的是,标记为async的脚本并不抱着按照指定它们的先后顺序执行。


    在以上代码中,第二个脚本文件可能会在第一个脚本文件之前执行,因此确保两者之间互不依赖非常重要,指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。一部脚本一定会在页面的load事件前执行。

    相关文章

      网友评论

          本文标题:关于JS异步和延迟

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