重学前端
程劭非(winter)
前手机淘宝前端负责人
105348 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
推荐试读
换一换
开篇词 | 从今天起,重新理解前端
时长 10:48
免费
JavaScript类型:关于类型,有哪些你不知道的细节?
时长 22:41
浏览器:一个浏览器是如何工作的?(阶段五)
时长 11:35
课程目录
已完结/共 57 讲
开篇词+学习路线+架构图 (3讲)
开篇词 | 从今天起,重新理解前端
时长 10:48
明确你的前端学习路线与方法
时长 11:10
列一份前端知识架构图
时长 15:38
模块一:JavaScript (15讲)
JavaScript类型:关于类型,有哪些你不知道的细节?
时长 22:41
JavaScript对象:面向对象还是基于对象?
时长 15:24
JavaScript对象:我们真的需要模拟类吗?
时长 17:43
JavaScript对象:你知道全部的对象分类吗?
时长 17:43
JavaScript执行(一):Promise里的代码为什么比setTimeout先执行?
时长 13:24
JavaScript执行(二):闭包和执行上下文到底是怎么回事?
时长 15:40
JavaScript执行(三):你知道现在有多少种函数吗?
时长 13:18
JavaScript执行(四):try里面放return,finally还会执行吗?
时长 11:25
JavaScript词法:为什么12.toString会报错?
时长 20:28
(小实验)理解编译原理:一个四则运算的解释器
时长 13:01
JavaScript语法(预备篇):到底要不要写分号呢?
时长 10:58
JavaScript语法(一):在script标签写export为什么会抛错?
时长 20:06
JavaScript语法(二):你知道哪些JavaScript语句?
时长 23:38
JavaScript语法(三):什么是表达式语句?
时长 13:44
JavaScript语法(四):新加入的**运算符,哪里有些不一样呢?
时长 14:55
模块二:HTML和CSS (16讲)
HTML语义:div和span不是够用了吗?
时长 16:17
HTML语义:如何运用语义类标签来呈现Wiki网页?
时长 15:27
CSS语法:除了属性和选择器,你还需要知道这些带@的规则
时长 21:59
HTML元信息类标签:你知道head里一共能写哪几种标签吗?
时长 12:29
CSS 选择器:如何选中svg里的a元素?
时长 15:18
CSS选择器:伪元素是怎么回事儿?
时长 18:31
HTML链接:除了a标签,还有哪些标签叫链接?
时长 22:36
CSS排版:从毕昇开始,我们就开始用正常流了
时长 14:52
HTML替换型元素:为什么link一个CSS要用href,而引入js要用src呢?
时长 10:03
HTML小实验:用代码分析HTML标准
时长 07:51
CSS Flex排版:为什么垂直居中这么难?
时长 07:46
CSS动画与交互:为什么动画要用贝塞尔曲线这么奇怪的东西?
时长 07:34
HTML语言:DTD到底是什么?
时长 10:45
CSS渲染:CSS是如何绘制颜色的?
时长 08:18
CSS小实验:动手做,用代码挖掘CSS属性
时长 04:21
HTML·ARIA:可访问性是只给盲人用的特性么?
时长 07:18
模块三:浏览器实现原理与API (9讲)
浏览器:一个浏览器是如何工作的?(阶段一)
时长 24:02
浏览器:一个浏览器是如何工作的?(阶段二)
时长 17:18
浏览器:一个浏览器是如何工作的(阶段三)
时长 11:02
浏览器:一个浏览器是如何工作的?(阶段四)
时长 10:00
浏览器:一个浏览器是如何工作的?(阶段五)
时长 11:35
浏览器DOM:你知道HTML的节点有哪几种吗?
时长 18:47
浏览器CSSOM:如何获取一个元素的准确位置
时长 16:36
浏览器事件:为什么会有捕获过程和冒泡过程?
时长 08:10
浏览器API(小实验):动手整理全部API
时长 10:22
模块四:前端综合应用 (5讲)
性能:前端的性能到底对业务数据有多大的影响?
时长 11:41
工具链:什么样的工具链才能提升团队效率?
时长 07:32
持续集成:几十个前端一起工作,如何保证工作质量?
时长 08:55
搭建系统:大量的低价值需求应该如何应对?
时长 09:30
前端架构:前端架构有哪些核心问题?
时长 08:02
特别加餐 (8讲)
新年彩蛋 | 2019,有哪些前端技术值得关注?
时长 05:30
用户故事 | 那些你与“重学前端”的不解之缘
时长 17:25
期中答疑 | name(){}与name: function() {},两种写法有什么区别吗?
时长 20:58
答疑加餐 | 学了这么多前端的“小众”知识,到底对我有什么帮助?
时长 10:48
加餐 | 前端与图形学
时长 14:49
加餐 | 前端交互基础设施的建设
时长 13:28
期末答疑(一):前端代码单元测试怎么做?
时长 25:06
期末答疑(二):前端架构中,每个逻辑页面如何可以做到独立发布呢?
时长 15:42
尾声 (1讲)
尾声 | 长风破浪会有时,直挂云帆济沧海
时长 05:11
重学前端
15
15
1.0x
00:00/00:00
登录|注册

浏览器:一个浏览器是如何工作的?(阶段五)

控制绘制时的消耗
提高性能
will-change属性
最大限度减少绘制次数
优化处理
受影响的属性
Freetype
像素字形和矢量字形
底层库支持
盒的背景、边框、SVG元素、阴影等特性
图形和文字
脏矩形算法
最终绘制到屏幕上
合成层
合成策略
性能考量
位图尺寸
字体库
渲染过程
实现一个玩具浏览器
性能优化
前端技术的设计和应用技巧
浏览器的最终任务
绘制
合成
渲染
结语
URL -> 字符流 -> 词流 -> DOM树 -> 应用CSS规则 -> 计算位置和大小 -> 渲染
浏览器工作原理

该思维导图由 AI 生成,仅供参考

你好,我是 winter。我们的浏览器系列已经进行到最后一篇。
在之前的几篇文章中,我们已经经历了把 URL 变成字符流,把字符流变成词(token)流,把词(token)流构造成 DOM 树,把不含样式信息的 DOM 树应用 CSS 规则,变成包含样式信息的 DOM 树,并且根据样式信息,计算了每个元素的位置和大小。
那么,我们最后的步骤,就是根据这些样式信息和大小信息,为每个元素在内存中渲染它的图形,并且把它绘制到对应的位置。

渲染

首先我们来谈谈渲染这个词,渲染也是个外来词,它是英文词 render 的翻译,render 这个词在英文里面,有“导致”“变成”的意思,也有“粉刷墙壁”的意思。
在计算机图形学领域里,英文 render 这个词是一个简写,它是特指把模型变成位图的过程。我们把 render 翻译成“渲染”,是个非常有意思的翻译,中文里“渲染”这个词是一种绘画技法,是指沾清水把墨涂开的意思。
所以,render 翻译成“渲染”,我认为是非常高明的,对 render 这个过程,用国画的渲染手法来概括,是颇有神似的。
我们现在的一些框架,也会把“从数据变成 HTML 代码的过程”称为 render,其实我觉得这是非常具有误导性的,我个人是非常不喜欢这种命名方式,当然了,所谓“文无第一”,在自然语言的范围里,我们很难彻底否定这种用法的合理性。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

浏览器渲染过程涉及将网页元素转化为位图的复杂过程,包括图形和文字两大类。渲染过程生成的位图尺寸通常与排版时占据的尺寸相同,但实际情况中会受到各种属性的影响。合成过程为提高性能,通过减少绘制次数原则来确定合成的策略。主流浏览器一般根据position、transform等属性来决定合成策略,而新的CSS标准中规定了will-change属性,可以由业务代码来提示浏览器的合成策略,从而提升合成策略的效果。 绘制是把位图最终绘制到屏幕上的过程,需要按照z-index依次绘制到屏幕上。然而,频繁的绘制会带来性能问题,因此采用“脏矩形”算法,将屏幕均匀地分成若干矩形区域,只重新绘制受影响的矩形区域,以控制绘制时的消耗。 总结来说,浏览器的位图操作包括渲染、合成和绘制三个部分,最终将一个URL变成可以看的网页图像。对浏览器工作原理的感性认识可以帮助理解前端技术的设计和应用技巧,尤其在性能优化方面。文章内容涉及浏览器工作原理和性能优化,对于想深入了解前端技术的读者具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《重学前端》
新⼈⾸单¥59
立即购买
开篇词 | 从今天起,重新理解前端
免费
JavaScript类型:关于类型,有哪些你不知道的细节?
浏览器:一个浏览器是如何工作的?(阶段五)
JavaScript执行(一):Promise里的代码为什么比setTimeout先执行?
期末答疑(二):前端架构中,每个逻辑页面如何可以做到独立发布呢?
登录 后留言

全部留言(29)

  • 最新
  • 精选
  • 大漠
    重绘,重排~都蛋疼

    编辑回复: 老师好呀,谢谢留言支持呀。

    2019-02-20
    2
    51
  • 逆风
    浏览器渲染出的结果如果是位图,请问输入框是怎么实现的?

    作者回复: 这个问到点子上啦,这块太复杂我故意没讲,实际上渲染过程除了位图,最终绘制上去还产生一个"热区",这个“热区”不但跟你说的input相关,还跟用户选择、鼠标事件和scroll等交互相关。

    2019-02-20
    45
  • wz
    是用canvas模拟一个iframe吗

    作者回复: 嗯 差不多是这个意思吧

    2019-02-19
    9
  • 宅。
    为什么我们专业老师说windows重绘机制下,只有窗口遮盖会产生无效矩形,鼠标划过是不会导致重绘的?

    作者回复: 我们学习的时候,需要有个基本的逻辑判断能力,而不是根据“谁说的”来判断对错。 如果鼠标划过不会重绘,那么鼠标遮盖住的内容是怎么出来的呢?

    2019-11-05
    6
    7
  • espelansa
    老师您好!在合成这边您写道“如果我们所有的元素都不合成,那么必须要重新绘制所有的元素”,这里我不是特别明白,为什么会需要重新绘制呢?

    作者回复: 你最终把元素画到屏幕上,当然所有元素都要重新绘制了。

    2019-02-22
    4
    3
  • Geek_eea87d
    作者大大,我想知道如果想深层次了解这方面知识应该查看的书籍或者是方向是什么

    作者回复: 书我不知道,可以看看chromium项目的邮件组,自己挑选阅读一些它的源代码。

    2019-04-09
    1
  • oillie
    跟developers.google上的用词有点不太一样,developers.google上是paint(绘制),对应本文中的render(渲染) 另外合成这块有点出入,以文中的例子来说,我的先前的认知是页面默认只有一个layer(chrome里的GraphicsLayer),c元素有transform样式属性,则单独生成一个layer,而合成是指gpu把两张layer合成一张位图

    作者回复: 合成的位图不可能就叫位图吧……

    2019-02-21
    2
    1
  • Hulk
    你好,我理解客户端在使用基于webkit的webView控件的时候,‘浏览器’的工作流程也是这样的吧? 大神能否明确一下浏览器在完成哪个节点以后会让webView控件发出webViewLoadFinish的通知? 此前遇到过一下问题,比如H5前端同学所言js是在页面加载成功后立马调用的,而客户端的同学未收到加载成功(收到webViewLoadFinish回调)却也看到了js的执行效果;所以这两端同学所言的加载成功,想必不是一回事?

    作者回复: 没记错的话LoadFinish应该是跟js里的onload同时发出的。 你可以让你们前端把performance全都打印出来跟你对一下。

    2019-02-21
    1
  • 全林聪
    如果每个盒子都会绘制一张位图, 父子盒子不合并成一张位图, 那么会占据大量的内存, 在把位图渲染到界面的时候, 又会花费大量的GPU, CPU. 所以怎么去合并位图就等同减少内存占用和减少CPU/GPU耗能了, 至于原文说, "可以保证渲染的结果能够最大程度被缓存", 我想指的是, 比如js改变了某一个元素, 不需要绘制位图->合成位图2步,而是只需要绘制位图这一步就可以了, 而原来存在的位图任然有效, 至于渲染成界面, 原文说, "那么如果我们所有的元素都不合成,会怎样呢?结果就是,相当于每次我们都必须要重新绘制所有的元素", 这里的每次都要必须绘制所有的元素, 我觉得有问题, 如果是第一次绘制, 那么会把所有的元素都绘制一次到UI界面上, 如果用js只修改了一个元素, 那么只影响到一个位图的变化, 那么也只会增量绘制一个位图的内容吧?

    作者回复: 怎么增量呢,这个位图可能被别人盖住了一半,你怎么算它的增量区域?

    2019-08-10
  • Geek_28f1ae
    注意,我们这里讲的渲染过程,是不会把子元素绘制到渲染的位图上的,这样,当父子元素的相对位置发生变化时,可以保证渲染的结果能够最大程度被缓存,减少重新渲染。老师,您好,渲染过程不会把子元素渲染到位图中,那渲染完岂不是子元素还没有位图信息?

    作者回复: 有啊 所有元素都要被渲染啊

    2019-04-05
收起评论
显示
设置
留言
29
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部

PHP网站源码木棉湾seo网站推广坂田优化同乐seo坪地网页设计南澳关键词按天扣费坪山百度关键词包年推广惠州企业网站建设石岩高端网站设计东莞网站制作深圳SEO按天计费沙井企业网站改版石岩网站开发民治推广网站沙井百姓网标王推广盐田模板制作大运网站推广工具大芬营销网站广州网站seo优化光明seo南联阿里店铺托管深圳百度网站优化排名布吉关键词排名包年推广东莞网站排名优化南联网站优化罗湖关键词按天扣费石岩关键词按天收费沙井百度seo大运企业网站建设福田网站推广工具南联关键词排名歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化