美文网首页
浏览器渲染机制

浏览器渲染机制

作者: 梦舟缘钓 | 来源:发表于2019-08-29 17:28 被阅读0次

    HTML页面加载和解析流程
    (1). 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件;
    (2). 浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件;
    (3). 浏览器又发出CSS文件的请求,服务器返回这个CSS文件;
    (4). 浏览器继续载入html中<body>部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了;
    (5). 浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
    (6). 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;
    (7). 浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它;
    (8). Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div> (style.display=”none”)。突然少了这么一个元素,浏览器不得不重新渲染这部分
    代码;
    (9). 终于等到了</html>的到来,浏览器泪流满面……
    (10). 等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<link>标签的CSS路径;
    (11). 浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱得重新来过……”,浏览器向服务器请求了新的CSS文件,重新渲染页面。

    上述这个过程是逐步完成的,为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。
    它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

    javascript的加载和执行的特点:
    (1)载入后马上执行;
    (2)执行时会阻塞页面后续的内容(包括页面的渲染、其它资源的下载)。原因:因为浏览器需要一个稳定的DOM树结构,而JS中很有可能有 代码直接改变了DOM树结构,
    比如使用 document.write 或 appendChild,甚至是直接使用的location.href进行跳转,浏览器为了防止出现JS修 改DOM树,需要重新构建DOM树的情况,
    所以 就会阻塞其他的下载和呈现。

    (1)Reflow(回流):浏览器要花时间去渲染,当它发现了某个部分发生了变化影响了布局,那就需要倒回去重新渲染。
    (2)Repaint(重绘):如果只是改变了某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的repaint,重画某一部分。
    Reflow要比Repaint更花费时间

    相关文章

      网友评论

          本文标题:浏览器渲染机制

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