当前位置: 首页 > news >正文 做的最好自考网站是哪个网站名称 规则 news 2025/11/6 4:18:14 做的最好自考网站是哪个,网站名称 规则,WordPress文章白色标签,上海网站建设推荐案例https://time.geekbang.org/column/article/118826 2.6 渲染流程#xff08;下#xff09;#xff1a;HTML、CSS和JavaScript#xff0c;是如何变成页面的#xff1f; 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段#xff0c;2.6讲解渲染流水线后面的阶段…https://time.geekbang.org/column/article/118826 2.6 渲染流程下HTML、CSS和JavaScript是如何变成页面的 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段2.6讲解渲染流水线后面的阶段。 简单回顾下2.5前三个阶段的主要内容 在 HTML 页面内容被提交给渲染引擎之后渲染引擎首先将 HTML 解析为浏览器可以理解的 DOM然后根据 CSS 样式表计算出 DOM 树所有节点的样式接着又计算每个元素的几何坐标位置并将这些信息保存在布局树中。 分层 有了布局树而且每个元素的具体位置信息都计算出来了那么接下来是不是就要开始着手绘制页面了 答案依然是否定的。 因为页面中有很多复杂的效果如一些复杂的 3D 变换、页面滚动或者使用 z-indexing 做 z 轴排序等为了更加方便地实现这些效果渲染引擎还需要为特定的节点生成专用的图层并生成一棵对应的图层树LayerTree。如果你熟悉 PS相信你会很容易理解图层的概念正是这些图层叠加在一起构成了最终的页面图像。 要想直观地理解什么是图层你可以打开 Chrome 的“开发者工具”选择“Layers”标签就可以可视化页面的分层情况如下图所示 从上图可以看出渲染引擎给页面分了很多图层这些图层按照一定顺序叠加在一起就形成了最终的页面你可以参考下图 现在你知道了浏览器的页面实际上被分成了很多图层这些图层叠加后合成了最终的页面。下面我们再来看看这些图层和布局树节点之间的关系如文中图所示 通常情况下并不是布局树的每个节点都包含一个图层如果一个节点没有对应的层那么这个节点就从属于父节点的图层。 如上图中的 span 标签没有专属图层那么它们就从属于它们的父节点图层。 但不管怎样最终每一个节点都会直接或者间接地从属于一个层。 那么需要满足什么条件渲染引擎才会为特定的节点创建新的图层呢 通常满足下面两点中任意一点的元素就可以被提升为单独的一个图层。 第一点拥有层叠上下文属性的元素会被提升为单独的一层 页面是个二维平面但是层叠上下文能够让 HTML 元素具有三维概念这些 HTML 元素按照自身属性的优先级分布在垂直于这个二维平面的 z 轴上。你可以结合下图来直观感受下 从图中可以看出明确定位属性的元素、定义透明属性的元素、使用 CSS 滤镜的元素等都拥有层叠上下文属性。若你想要了解更多层叠上下文的知识你可以参考这篇文章。 第二点需要剪裁clip的地方也会被创建为图层 不过首先你需要了解什么是剪裁结合下面的 HTML 代码 stylediv {width: 200;height: 200;overflow:auto;background: gray;} /style bodydiv p所以元素有了层叠上下文的属性或者需要被剪裁那么就会被提升成为单独一层你可以参看下图/pp从上图我们可以看到document层上有A和B层而B层之上又有两个图层。这些图层组织在一起也是一颗树状结构。/pp图层树是基于布局树来创建的为了找出哪些元素需要在哪些层中渲染引擎会遍历布局树来创建层树Update LayerTree。/p /div /body在这里我们把 div 的大小限定为 200 * 200 像素而 div 里面的文字内容比较多文字所显示的区域肯定会超出 200 * 200 的面积这时候就产生了剪裁渲染引擎会把裁剪文字内容的一部分用于显示在 div 区域下图是运行时的执行结果 出现这种裁剪情况的时候渲染引擎会为文字部分单独创建一个层如果出现滚动条滚动条也会被提升为单独的层。你可以参考下图 所以说元素有了层叠上下文的属性或者需要被剪裁满足其中任意一点就会被提升成为单独一层。 图层绘制 在完成图层树的构建之后渲染引擎会对图层树中的每个图层进行绘制那么接下来我们看看渲染引擎是怎么实现图层绘制的 试想一下如果给你一张纸让你先把纸的背景涂成蓝色然后在中间位置画一个红色的圆最后再在圆上画个绿色三角形。你会怎么操作呢 通常你会把你的绘制操作分解为三步 绘制蓝色背景在中间绘制一个红色的圆再在圆上绘制绿色三角形。 渲染引擎实现图层的绘制与之类似会把一个图层的绘制拆分成很多小的绘制指令然后再把这些指令按照顺序组成一个待绘制列表如下图所示 从图中可以看出绘制列表中的指令其实非常简单就是让其执行一个简单的绘制操作比如绘制粉色矩形或者黑色的线等。而绘制一个元素通常需要好几条绘制指令因为每个元素的背景、前景、边框都需要单独的指令去绘制。所以在图层绘制阶段输出的内容就是这些待绘制列表。 你也可以打开“开发者工具”的“Layers”标签选择“document”层来实际体验下绘制列表如下图所示 在该图中区域 1 就是 document 的绘制列表拖动区域 2 中的进度条可以重现列表的绘制过程。 栅格化raster操作 绘制列表只是用来记录绘制顺序和绘制指令的列表而实际上绘制操作是由渲染引擎中的合成线程来完成的。你可以结合下图来看下渲染主线程和合成线程之间的关系 如上图所示当图层的绘制列表准备好之后主线程会把该绘制列表提交commit给合成线程那么接下来合成线程是怎么工作的呢 那我们得先来看看什么是视口你可以参看下图 通常一个页面可能很大但是用户只能看到其中的一部分我们把用户可以看到的这个部分叫做视口viewport。 在有些情况下有的图层可以很大比如有的页面你使用滚动条要滚动好久才能滚动到底部但是通过视口用户只能看到页面的很小一部分所以在这种情况下要绘制出所有图层内容的话就会产生太大的开销而且也没有必要。 基于这个原因合成线程会将图层划分为图块tile这些图块的大小通常是 256x256 或者 512x512如下图所示 然后合成线程会按照视口附近的图块来优先生成位图实际生成位图的操作是由栅格化来执行的。所谓栅格化是指将图块转换为位图。而图块是栅格化执行的最小单位。渲染进程维护了一个栅格化的线程池所有的图块栅格化都是在线程池内执行的运行方式如下图所示 通常栅格化过程都会使用 GPU 来加速生成使用 GPU 生成位图的过程叫快速栅格化或者 GPU 栅格化生成的位图被保存在 GPU 内存中。 相信你还记得GPU 操作是运行在 GPU 进程中如果栅格化操作使用了 GPU那么最终生成位图的操作是在 GPU 中完成的这就涉及到了跨进程操作。具体形式你可以参考下图 从图中可以看出渲染进程把生成图块的指令发送给 GPU然后在 GPU 中执行生成图块的位图并保存在 GPU 的内存中。 合成和显示 一旦所有图块都被光栅化合成线程就会生成一个绘制图块的命令——“DrawQuad”然后将该命令提交给浏览器进程。 浏览器进程里面有一个叫 viz 的组件用来接收合成线程发过来的 DrawQuad 命令然后根据 DrawQuad 命令将其页面内容绘制到内存中最后再将内存显示在屏幕上。 到这里经过这一系列的阶段编写好的 HTML、CSS、JavaScript 等文件经过浏览器就会显示出漂亮的页面了。 渲染流水线大总结 好了我们现在已经分析完了整个渲染流程从 HTML 到 DOM、样式计算、布局、图层、绘制、光栅化、合成和显示。下面我用一张图来总结下这整个渲染流程 结合上图一个完整的渲染流程大致可总结为如下 渲染进程将 HTML 内容转换为能够读懂的 DOM 树结构。渲染引擎将 CSS 样式表转化为浏览器可以理解的 styleSheets计算出 DOM 节点的样式。创建布局树并计算元素的布局信息。对布局树进行分层并生成分层树。为每个图层生成绘制列表并将其提交到合成线程。合成线程将图层分成图块并在光栅化线程池中将图块转换成位图。合成线程发送绘制图块命令 DrawQuad 给浏览器进程。浏览器进程根据 DrawQuad 消息生成页面并显示到显示器上。 相关概念 有了上面介绍渲染流水线的基础我们再来看看三个和渲染流水线相关的概念——“重排”“重绘”和“合成”。理解了这三个概念对于你后续 Web 的性能优化会有很大帮助。 1. 更新了元素的几何属性重排 从上图可以看出如果你通过 JavaScript 或者 CSS 修改元素的几何位置属性例如改变元素的宽度、高度等那么浏览器会触发重新布局解析之后的一系列子阶段这个过程就叫重排。无疑重排需要更新完整的渲染流水线所以开销也是最大的。 2. 更新元素的绘制属性重绘 接下来我们再来看看重绘比如通过 JavaScript 更改某些元素的背景颜色渲染流水线会怎样调整呢你可以参考下图 从图中可以看出如果修改了元素的背景颜色那么布局阶段将不会被执行因为并没有引起几何位置的变换所以就直接进入了绘制阶段然后执行之后的一系列子阶段这个过程就叫重绘。相较于重排操作重绘省去了布局和分层阶段所以执行效率会比重排操作要高一些。 3. 直接合成阶段 那如果你更改一个既不要布局也不要绘制的属性会发生什么变化呢渲染引擎将跳过布局和绘制只执行后续的合成操作我们把这个过程叫做合成。具体流程参考下图 在上图中我们使用了 CSS 的 transform 来实现动画效果这可以避开重排和重绘阶段直接在非主线程上执行合成动画操作。这样的效率是最高的因为是在非主线程上合成并没有占用主线程的资源另外也避开了布局和绘制两个子阶段所以相对于重绘和重排合成能大大提升绘制效率。 至于如何用这些概念去优化页面我们会在后面相关章节做详细讲解的这里你只需要先结合“渲染流水线”弄明白这三个概念及原理就行。 总结 通过本文的分析你应该可以看到Chrome 的渲染流水线还是相当复杂晦涩且难以理解不过 Chrome 团队在不断添加新功能的同时也在不断地重构一些子阶段目的就是让整体渲染架构变得更加简单和高效正所谓大道至简。 通过这么多年的生活和工作经验来看无论是做架构设计、产品设计还是具体到代码的实现甚至处理生活中的一些事情能够把复杂问题简单化的人都是具有大智慧的。所以在工作或生活中你若想要简化遇到的问题就要刻意地练习练就抓住问题本质的能力把那些复杂的问题简单化从而最终真正解决问题。 思考时间 在优化 Web 性能的方法中减少重绘、重排是一种很好的优化方式那么结合文中的分析你能总结出来为什么减少重绘、重排能优化 Web 性能吗那又有那些具体的实践方法能减少重绘、重排呢 文章转载自: http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.pxlpt.cn.gov.cn.pxlpt.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.ctfwl.cn.gov.cn.ctfwl.cn http://www.morning.pttrs.cn.gov.cn.pttrs.cn http://www.morning.ntyanze.com.gov.cn.ntyanze.com http://www.morning.crtgd.cn.gov.cn.crtgd.cn http://www.morning.hghhy.cn.gov.cn.hghhy.cn http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.rtbhz.cn.gov.cn.rtbhz.cn http://www.morning.hrtct.cn.gov.cn.hrtct.cn http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.dxpqd.cn.gov.cn.dxpqd.cn http://www.morning.prmbn.cn.gov.cn.prmbn.cn http://www.morning.jbmsp.cn.gov.cn.jbmsp.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.bfsqz.cn.gov.cn.bfsqz.cn http://www.morning.prznc.cn.gov.cn.prznc.cn http://www.morning.rbjp.cn.gov.cn.rbjp.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.npbgj.cn.gov.cn.npbgj.cn http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn http://www.morning.fqssx.cn.gov.cn.fqssx.cn http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn http://www.morning.pdbgm.cn.gov.cn.pdbgm.cn http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn http://www.morning.rdlxh.cn.gov.cn.rdlxh.cn http://www.morning.tgtsg.cn.gov.cn.tgtsg.cn http://www.morning.rksnk.cn.gov.cn.rksnk.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.rfldz.cn.gov.cn.rfldz.cn http://www.morning.srtw.cn.gov.cn.srtw.cn http://www.morning.hsksm.cn.gov.cn.hsksm.cn http://www.morning.qqpg.cn.gov.cn.qqpg.cn http://www.morning.rgrys.cn.gov.cn.rgrys.cn http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn http://www.morning.xjmyq.com.gov.cn.xjmyq.com http://www.morning.tplht.cn.gov.cn.tplht.cn http://www.morning.webpapua.com.gov.cn.webpapua.com http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.rzcfg.cn.gov.cn.rzcfg.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.chjnb.cn.gov.cn.chjnb.cn http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.dplmq.cn.gov.cn.dplmq.cn http://www.morning.fswml.cn.gov.cn.fswml.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.xqjz.cn.gov.cn.xqjz.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.xrlwr.cn.gov.cn.xrlwr.cn http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.wpspf.cn.gov.cn.wpspf.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.prysb.cn.gov.cn.prysb.cn http://www.morning.lhztj.cn.gov.cn.lhztj.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.drpbc.cn.gov.cn.drpbc.cn http://www.morning.mdmxf.cn.gov.cn.mdmxf.cn http://www.morning.dfffm.cn.gov.cn.dfffm.cn http://www.morning.hdwjb.cn.gov.cn.hdwjb.cn http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.kllzy.com.gov.cn.kllzy.com http://www.morning.cytr.cn.gov.cn.cytr.cn http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn http://www.morning.sfqtf.cn.gov.cn.sfqtf.cn http://www.morning.ykyfq.cn.gov.cn.ykyfq.cn http://www.morning.hbqfh.cn.gov.cn.hbqfh.cn 查看全文 http://www.tj-hxxt.cn/news/281287.html 相关文章: 网网站基础建设优化知识门户网站系统设计 宁波网站设计方案做网站好公司有哪些 网站seo推广方案超越时空网上书城网站策划书 国外网站排行榜wordpress 摄影 模板 网站建设公司简介模板wordpress 使用浏览器缓存 淘宝内部卷网站建设深圳宝安区是什么风险 网站导航优化的描述游戏设计网站 公司网站搭建南宁市建设厅网站 phpcms 网站路径建设银行大厂支行网站 营销网站建设步骤wordpress表单制作 营销建设网站个人做网站能赚到钱吗 沧州网站优化个人建设网站教程 苏州模板建站定制wordpress 主题 demo 工信部网站备案查询系统joomla网站如何加入会话功能 网站闭站保护做网站空间 网站设计描述114网址大全 合肥知名网站制作公司广阳区建设局网站 网站外链建设培训找我家是做的视频网站 flash 网站厦门关键词排名提升 外贸建站与推广如何做手机壳湖北建设网 鞍山企业做网站vshtml5网站开发 西安市未央区建设局官方网站网站12栅格系统怎么做 创建网站英语哪些网站有友情链接 郑州网站建设包括哪些吉林网站建设企业 网站被恶意点击怎么办protected wordpress login 基础网站建设素材甘肃三北防护林建设局网站 网站制作 搜索网站智能建设有那些优势 谷歌优化 网站建设如何选择免费网站建设 自己做第一个网站山东滕州做网站技术电话 上海网站设计工具广州网站建设知名 乐云践新