scrollleft设置图片移动 scrollleft

各位小伙伴,今天我们广州蓝景实训部,和大家普及一下前端技术-浏览器渲染流程,希望能帮助大家更深入地了解这方面的知识 。
前言
浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎 。渲染引擎在不同的浏览器中也不是都相同的 。目前市面上常见的浏览器内核可以分为这四种:Trident(IE)、Gecko(火狐)、Blink(Chrome、Opera)、Webkit(Safari) 。这里面大家最耳熟能详的可能就是 Webkit 内核了,Webkit 内核是当下浏览器世界真正的霸主 。
本文我们就以 Webkit 为例,对现代浏览器的渲染过程进行一个深度的剖析 。
页面加载过程
在介绍浏览器渲染过程之前,我们简明扼要介绍下页面的加载过程,有助于更好理解后续渲染过程 。
要点如下:
向浏览器输入网址浏览器根据 DNS 服务器得到域名的 IP 地址向这个 IP 的机器发送 HTTP 请求服务器收到、处理并返回 HTTP 请求浏览器接收到服务器返回的内容例如在浏览器输入https://www.baidu.com,然后经过 DNS 解析,www.baidu.com对应的 IP 14.215.177.38(不同时间、地点对应的 IP 可能会不同) 。然后浏览器向该 IP 发送 HTTP 请求 。
服务端接收到 HTTP 请求,然后经过计算(向不同的用户推送不同的内容),返回 HTTP 请求,返回的内容如下:
其实就是一堆 HMTL 格式的字符串,因为只有 HTML 格式浏览器才能正确解析,这是 W3C 标准的要求 。接下来就是浏览器的渲染过程 。
浏览器渲染过程

scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
scrollleft设置图片移动 scrollleft

文章插图
过“桥”要收费——这个开销本身就是不可忽略的 。我们每操作一次DOM(不管是为了修改还是仅仅为了访问其值),都要过一次“桥” 。过“桥”的次数一多,就会产生比较明显的性能问题 。因此“减少 DOM 操作”的建议,并非空穴来风 。
性能优化策略
基于上面介绍的浏览器渲染原理,DOM 和 CSSOM 结构构建顺序,初始化可以对页面渲染做些优化,提升页面性能 。
【scrollleft设置图片移动 scrollleft】JS优化: <script> 标签加上 defer属性 和 async属性 用于在不阻塞页面文档解析的前提下,控制脚本的下载和执行 。defer属性: 用于开启新的线程下载脚本文件,并使脚本在文档解析完成后执行 。async属性: HTML5新增属性,用于异步下载脚本文件,下载完毕立即解释执行代码 。CSS优化:<link>标签的 rel属性 中的属性值设置为 preload 能够让你在你的HTML页面中可以指明哪些资源是在页面加载完成后即刻需要的,最优的配置加载顺序,提高渲染性能

总结
综上所述,我们得出这样的结论:
浏览器工作流程:构建DOM -> 构建CSSOM -> 构建渲染树 -> 布局 -> 绘制 。CSSOM会阻塞渲染,只有当CSSOM构建完毕后才会进入下一个阶段构建渲染树 。通常情况下DOM和CSSOM是并行构建的,但是当浏览器遇到一个不带defer或async属性的script标签时,DOM构建将暂停,如果此时又恰巧浏览器尚未完成CSSOM的下载和构建,由于JavaScript可以修改CSSOM,所以需要等CSSOM构建完毕后再执行JS,最后才重新DOM构建 。

    推荐阅读