美文网首页
js脚本调用策略优劣比较(理解)

js脚本调用策略优劣比较(理解)

作者: 这样你就找不到我了 | 来源:发表于2022-01-11 09:46 被阅读0次

常用方法以及存在问题

放置于head处

先加载js再加载Html。
当Js文件很大时,需要等js文件全部加载完之后才会加载html,应用会出现短暂的空白,影响用户体验。

放置于文档末尾

先加载Html再加载js。
虽然解决了需要等待js加载的问题,但是由于html和js的加载仍然是线性的,总体的加载时间并没有缩短。

async

前面提到,无论是先加载html还是先加载js,效率都是较低的。那要怎么解决这个问题,实现同时加载呢?
答案是使用async。

<script src="script.js" async></script>

浏览器遇到 async 脚本时不会阻塞页面渲染,而是直接下载然后运行。这样脚本的运行次序就无法控制,只是脚本不会阻止剩余页面的显示。当页面的脚本之间彼此独立,且不依赖于本页面的其它任何脚本时,async 是最理想的选择。

defer

async解决了同时加载的问题,但是

这样脚本的运行次序就无法控制

我的理解是,假设有AB两个个文件,由于html和js是同时加载运行的,
可能A运行所需要操作的html元素在html文件的后半段,
而B运行所需要的html元素就在html文件的前半段。
有可能 AB加载完成之后,由于html还只加载了前半段,B文件将会先于A文件运行。

由此出现的新的问题:当B文件中js对A文件有所依赖,先运行B文件是行不通的。
我们要怎样让AB文件严格按照先运行A文件,后运行B文件的顺序执行呢?
答案是使用defer。

<script defer src="js/A.js"></script>
<script defer src="js/B.js"></script>

总结

如果脚本无需等待页面解析,且无依赖独立运行,那么应使用 async。
如果脚本需要等待页面解析,且依赖于其它脚本,调用这些脚本时应使用 defer,将关联的脚本按所需顺序置于 HTML 中。

参考 MDN-什么是JavaScript

相关文章

  • js脚本调用策略优劣比较(理解)

    常用方法以及存在问题 放置于head处 先加载js再加载Html。当Js文件很大时,需要等js文件全部加载完之后才...

  • 前端跨域请求原理

    1.跨域请求的含义 由于浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本(js)对不同域的服务进行跨站调用...

  • 自制jquery-第一篇

    1, jquery.js脚本文件 2,实现链式调用的原理 非链式调用:$xxx.addClass("active"...

  • js-this

    javascript中的this js中的this,比较难以理解,下面进行简单记录。主要分为以下几种情况 方法调用...

  • 2018-12-18

    iOS WKWebView 中native调用js, js调用native native设js比较简单,一行函数即...

  • 关于WebView

    JS与Android原生交互 首先,webview应该先支持JS脚本 其次,写一个JS交互的接口,用来调用原生的方...

  • wepy漏写报错

    appservice:1119 pages/watch.js 出现脚本错误或者未正确调用 Page() watch...

  • wepy引入报错

    appservice:1113 pages/index.js 出现脚本错误或者未正确调用 Page() 此错误主要...

  • 关于同源策略你可能也有的一些疑问

    同源策略的含义详解 含义一(DOM层面的同源策略):限制了来自不同的”document”对象或js脚本,对当前“d...

  • 常用的跨域方法

    因为浏览器的同源策略保护机制,我们不能随意运行其他不同源下的js脚本,当我们需要跨域运行js脚本时可以使用以下方法...

网友评论

      本文标题:js脚本调用策略优劣比较(理解)

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