进阶1: JS相关概念

2017-08-23  本文已影响30人  晓风残月1994

简单介绍 JavaScript的发展历史


介绍浏览器的渲染机制

  1. 解析HTML以构建DOM树:渲染引擎开始解析HTML文档,转换树中的html标签或js生成的标签到DOM节点,它被称为 -- 内容树。
  2. 构建渲染树:解析CSS(包括外部CSS文件和样式元素以及js生成的样式),根据CSS选择器计算出节点的样式,创建另一个树 —- 渲染树。
  3. 布局渲染树: 从根节点递归调用,计算每一个元素的大小、位置等,给每个节点所应该出现在屏幕上的精确坐标。
  4. 绘制渲染树: 遍历渲染树,每个节点将使用UI后端层来绘制
浏览器渲染流程图
浏览器的工作原理,可参考How browsers work

样式、JS 在 HTML 中如何放置?

使用 link 标签将样式表放在顶部
将JS放在底部
原因如下:


解释白屏和 FOUC

以上两种现象,存在于不同浏览器的不同加载机制上。


介绍下 repaint和 reflow的概念

首先,要明白的是,repaint,和reflow,都是浏览器内部的处理机制。你无法该表浏览器的处理行为, 但是你可以改变自己的代码,从而在浏览器的机制下,写出更好的代码。

二者的关系上,是reflow必然伴随着repaint,而repaint未必有reflow的参与。


如何异步加载脚本

  1. <script src="script.js"></script>
    没有 defer 或 async,浏览器会立即加载并执行指定的脚本,“在渲染该 script 标签之下的文档元素之前,不会等待后续要载入的文档元素,此刻读到script标签就会加载并执行。
  2. <script async src="script.js"></script>
    有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(同时进行,并行,也就是异步,双管齐下)。
  3. <script defer src="script.js"></script>
    有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。
defer & async

注意到async和defer的异同点了吗?

上一篇下一篇

猜你喜欢

热点阅读