javascript - 同步和异步 JavaScript 脚本加载在性能上有什么区别?

标签 javascript asynchronous

我的问题很简单:同步和异步 JavaScript 脚本加载在性能上有什么区别?

根据我收集到的信息,同步代码会阻止页面加载和/或其余代码的执行。这发生在两个层面

首先,在实际加载的脚本级别,其次,在 JavaScript 代码本身。

例如,在页面上:

同步:<script src="demo_async.js" type="text/javascript"></script>

异步:<script async src="demo_async.js" type="text/javascript"></script>

编辑:删除了无效的代码示例

那么使用这些不同的加载方法和 JavaScript 模式在性能上到底有什么不同呢?

最佳答案

对于您的第一个问题/片段,它更多地是关于控制流而不是性能。性能只是其中的隐含结果。

<script>传统上,如果遇到标签,会阻止 HTML 渲染器。这意味着,如果您加载一个带有阻塞 <script>巨大 javascript 文件标记位于标记的最顶部,只要脚本正在加载和评估,用户就不会在页面上看到任何进度。

相反,如果我们标记 <script>带有 async 和/或 defer 等属性的标记,浏览器将不再停止 HTML 呈现过程,而是加载和评估脚本 block < em>异步。实现如何做到这一点,与您无关(无论它是在幕后使用真正的线程还是只是按顺序处理它)。


您的第二个片段并不是真正的异步代码。它只是函数表达式 调用它们自己。这仍然被认为是同步执行

关于javascript - 同步和异步 JavaScript 脚本加载在性能上有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13805519/

相关文章:

java - 在 CompletableFuture 中执行不同签名的方法

javascript - 在 Javascript 中执行 ABCD 函数之前如何等待所有 Promise 完成?

c++ - 为什么即使使用指定的 std::launch::async 标志,std::async 也会同步调用该函数

javascript - Callover 显示 overtop bootstrap 选择下拉菜单

javascript - 2 个用于更改颜色不透明度的按钮(Javascript)

javascript - 将 Safari 重定向到 Chrome

c# - 如何异步和顺序调用事件?

javascript - 用 browserify 预处理?

javascript - 在 Google Chrome 中捕获下载

ios - 异步调用后无法刷新 UI