应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

关于浏览器的深入解析都在这31张图里

  前言
  现代浏览器十分复杂,颇有运行在操作系统之上的操作系统的意思,我们将尽可能用简单容易理解的例子来简单概括它主要的工作逻辑。
  目录:
  进程与线程概述;
  浏览器架构;
  浏览器视角下的输入;
  页面如何渲染;
  如何进行交互;
  Part1。进程与线程概述
  计算机的核心是CPU,它承担了几乎所有的计算任务。
  你可以把CPU想象成是一个工厂,时刻在运行着。
  假设这个工厂的电力有限,同一时刻只能供一个车间使用。这也就意味着,一个车间正在使用,其他车间都将不会被使用。
  进程就好比车间,是工厂将要执行的任务。潜台词就是说,单个CPU任意时刻总是只能运行一个任务。
  一个车间可以有很多的工人,它们协同完成同一个任务。
  线程就是车间里的工人。
  假设工人都是很耗电的机器人,靠着分得工厂给的电力进行任务,每一次给的电力刚好够完成本次的任务,而工厂同一时刻又只能给一个机器人供电。
  这几乎就是单核CPU的工作方式了:同一时刻只能做一个工作。
  但你仍然感觉到许多不同的任务正在同时运行着,这是因为当切换任务的速度足够快时,你将感知不到CPU同一时刻只能做一个工作的特性:
  我们的CPU就这样飞速地奔腾着。
  每当我们打开一个应用,就会启动一个进程。程序也会创建一个或多个线程来帮助它完成工作。
  操作系统会为进程提供一个可使用的一块内存,就像开工厂占地一样,所有应用程序的状态信息都会保存在该私有内存空间中。程序关闭时,相应进程会消失,操作系统也会释放内存。
  进程可以请求操作系统启动另一个进程来执行不同的任务。此时内存不同区域会分给新进程。
  如果两个进程需要对话,他们可以通过进程间通信(IPC)来进行。
  许多应用程序就是这样设计的,如果一个工作进程失去响应,该进程就可以在不停止应用程序的情况下靠着其他进程重新启动。
  Part2。浏览器架构
  那么如何通过进程和线程构建web浏览器呢?
  虽然对于如何构建web浏览器没有明确的标准,但现在拥有一个导航栏、输入框、标签页这样类似的设计却是不同浏览器之间默契的共同选择。
  浏览器的架构也总体分为两类:
  现在已经很难看到单进程的架构方式了,因为单进程的浏览器需要处理的事情太多(网络、渲染、管理插件等),极不稳定和安全。因此市面上主流的浏览器都已经升级为多进程的方式。
  就拿Chrome举例来说,就采取了下方的架构方式:
  最顶层是浏览器进程,负责协调处理其他进程模块的任务。
  UI进程负责控制地址栏、标签页等;
  渲染进程控制标签页内网站的展示。
  插件进程控制站点使用的任意插件,比如:Flash。
  GPU进程单独处理来自不同应用发送的绘制请求。
  。。。。
  多进程的好处显而易见。比如当你打开了三个标签页,其中一个崩溃了,你可以关掉它而不会影响其他两个标签页:
  并且由于进程的数据是私有的,所以一定程度上能够保证安全性。
  但缺点也显而易见。我们上面用车间来类比进程,用工人来类比线程,显然建一座车间比招聘一个工人消耗的资源要大得多哪怕车间只有一个工人这里比较明显的是对内存的消耗。
  为了避免过大的内存消耗,Chrome把一些服务做了聚合:
  这样就能一定程度上减少内存的开销。
  Part3。浏览器视角下的输入
  当在浏览器中键入一个URL地址,浏览器会做什么处理呢?
  第一步:处理输入
  我们已经习惯了一个链接打开就对应一个外部网站,但它还可能是浏览器本身的设置页(如chrome:settings),或是本地硬盘的地址(如Mac下的):
  所以我们的第一步就是要判断这个输入到底是个啥:
  第二步:开始导航
  随着用户输入完毕按下Enter键,UI线程知道要启用网络去调取网站的信息。网络线程会负责联系目标主机并获取到信息:
  网络线程获取信息的过程,发生了很多事,比如DNS域名解析、TLS建立连接等,如果不熟悉可以看看之前的系列文章。
  第三步:读取响应
  总之网络线程为我们取到了来自网站的响应,大概长这样:
  响应分为header和payload两个部分。header类似于一本书的版权、作者介绍等相关信息,而payload才是真实的数据内容。
  浏览器需要根据响应头里的ContentType来区分对应内容的类型,例如texthtml时浏览器会对内容进行HTML解析,imagepng则调用图片渲染器。
  然而完全信任网站响应的ContentType是不行的,因为一旦ContentType未指定或者是一个错误的值的时候,就会发生未知的错误。
  所以当收到响应主体(payload)时,网络线程会在必要时检查数据的前几个字节,以确保数据内容与header里标识的数据类型(ContentType)一致。如果不一致,那么就需要进行MIME类型嗅探来猜测该数据的类型。
  当响应是一个HTML文件时,此时也会进行安全检查(SafeBrowsing检查)。如果域名和相应数据似乎匹配到了一个已知的恶意网站,那么网络线程会显示一个警告页面。
  除此之外,还会发生CrossOriginReadBlocking(CORB)检查,以确保敏感的跨域数据不被传给渲染进程。
  第四步:查找渲染进程
  一旦所有的检查执行完毕并且网络线程确信浏览器会导航到请求的站点,网络线程会告诉UI线程所有的数据准备完毕。UI线程会寻找渲染进程去开始渲染web页面。
  由于网络请求会花费几百毫秒才获取回响应,因此可以应用一个优化措施。
  当第2步UI线程正发送一个URL请求给网络线程时,它已经知道它们会导航到哪个站点。在网络请求的同时,UI线程并行地尝试主动寻找或开启一个渲染进程。
  这样,如果一切按预期进行,渲染进程在网络线程接受到数据时就已经处于待命状态。
  第五步:提交导航
  现在数据和渲染进程已经就绪,浏览器进程会发送一个IPC(进程间通信)到渲染进程去提交导航。
  这时地址栏会更新、标签页的历史记录也会更新,前进后退按钮会走向刚导航过的站点。渲染进程根据HTML内容开始解析并渲染页面。最终您将看到网站设计者设计的网站。
  Part4。页面如何渲染
  渲染进程涉及Web性能的许多方面,流程非常复杂,我们只做必要的理解。如果您想要深入了解,可以在web。dev找到相关资源。
  渲染进程内部包含主线程、工作线程、合成线程和光栅线程。
  在详细说明之前,请先想象一个这样的场景:您站在一副简单绘画的面前,如何通过打电话来让您的朋友知道这幅画究竟长什么样子呢?
  如果您真打算这么做,这里参考HTML解析的过程给您提供一些建议。
  首先,图中的元素以及具体元素的属性分开描述(如:图里有一个圆是元素,圆有多大具体在什么位置等是属性):
  这样做的好处是可阅读性变高了,有哪些元素,以及元素哪些属性一目了然,也利于分别维护和修改。(类似于书的目录和对应内容一样)
  另外是你可以提炼一些通用的属性来减少描述:
  然后,最好是分层进行描述,因为图画是有层次的,光有元素大小、位置等信息是不够的:
  元素实际上就是我们通常说的HTML文件,HTML文件中包含了描述元素属性的CSS样式文件。每个浏览器对应常见的样式都会有默认的样式。
  浏览器实际上要知道绘制些什么元素,每个元素属性如何是要分成三步的:1)通过HTML绘制元素树(俗称DOM树);2)通过CSS文件绘制样式树(俗称CSSOM树);3)综合两颗树绘制渲染树(俗称RenderTree);
  现在浏览器知道文档的结构、每个元素的样式、页面的几何形状和绘制顺序,它是如何绘制页面的?把这些信息转换为屏幕上的像素,我们称为光栅化。
  处理这种情况的一种简单的方法是,先在光栅化视窗内的画面,如果用户滚动页面,则移动光栅框,并光栅化填充缺少的部分。这就是Chrome首次发布时处理光栅化的方式。
  但是,现代浏览器会运行一个更复杂的过程,我们称为合成。
  合成是一种将页面的各个部分分层,分别光栅化,并在称为合成线程的单独线程中合成为页面的技术。如果发生滚动,由于图层已经光栅化,因此它所要做的只是合成一个新帧。动画也可以以相同的方式(移动图层和合成新帧)实现。
  另外需要说明的是如何进行描述是有相当的技巧的。例如正中心有一个半径为2的圆和正中心有一个直径为页面宽度50的圆是完全不同的:
  如何进行组织描述,这需要网站建设者的经验。
  Part5。如何进行交互
  在浏览器眼中,用户的一切行为都是输入。不单单是滚动鼠标滑轮,或是点击屏幕、按下按键等。
  对于浏览器进程来说只存在事件和对应坐标,只有渲染进程知道页面究竟长啥样,以及究竟该如何处理事件。浏览器进程只负责把事件和坐标发送给渲染进程。
  我们也可以编写自己的逻辑文件(js文件)来监听某一事件进行对应的处理。然后再统一由渲染进程进行合成。为了浏览流畅,浏览器需要保证渲染进程的渲染速度与屏幕刷新率一致(大概每秒60帧)。
  另外为了降低主线程中传递过量的调用,Chrome也会把一些连续的事件进行合并。
  浏览器进程监听并发送事件给渲染进程进行渲染,这大概就是浏览器交互的基本方式。
  后记
  浏览器的复杂远不是一篇文章能解释清楚的,本篇文章也只是想让大家理解浏览器的基本过程和原理。尽可能使用动图的形式清晰地表达,希望大家能用餐愉快。
  本文大量借鉴了Chrome官方developer分享的系列文章(下2),如果有想更加深入了解的小伙伴也可以阅读更加硬核的浏览器工作原理揭秘文章(下4)
  至此,我们对浏览器已经有了相当的了解了。后续也会继续跟大家一起学习计算机网络的基础知识,也会尝试着跟着后端学习路线图的脚步跟着大家一起学习进阶。
  参考资料
  进程与线程的简单解释http:www。ruanyifeng。comblog201304processesandthreads。html
  转载:现代浏览器内部揭秘https:hasaki。xyzblog20200120E8BDACE8BDBDE78EB0E4BBA3E6B58FE8A788E599A8E58685E983A8E68FADE7A798
  深入浅出浏览器渲染原理https:blog。fundebug。com20190103understandbrowserrendering
  浏览器工作原理幕后揭秘https:www。html5rocks。comzhtutorialsinternalshowbrowserswork
  (完)
  有你想看的精彩
  Hi,这里是我没有三颗心脏,2021,与您在BeBetter的路上共同成长!

感谢应采儿,放陈小春来参加披荆斩棘,春哥也太招人喜欢了感谢应采儿,放陈小春来参加《披荆斩棘》,春哥也太招人喜欢了在第一季《浪姐》完结之后就已经有传言芒果台已经开始在筹备浪哥,过了两年终于安排上的《披荆斩棘的哥哥》,原本以为会……61岁麦当娜为26岁男友庆生,身家超40亿,情史混乱,换男人61岁的麦当娜在其社交平台上晒出与26岁男友的亲密合影,祝他生日快乐。两人于2015年就相识,男友阿拉马利克威廉姆斯是麦当娜的伴舞和编舞,非常崇拜麦当娜。麦当娜与小男友……回顾四年前杭州保姆纵火案,三个问号无法拉直林生斌宣布自己结婚生女后,深情人设迅速坍塌,随后引出诸多疑点。林生斌除了在7月8日连发五文,作了自我洗白式的、隔靴搔痒的回应辩解外,至今没有对各种质疑作出具体的解释。他的沉默究……古装剧三大美女,那些神仙颜值对比,惊艳了时光之前慕木有一篇关于古装美男的文章,但是美男子有了,女子自然是不能少的呀!古装剧三大美男,神仙颜值对比,男人美起来真的没有女人什么事了所以慕木这就来聊聊古装剧中,装扮……张一山版鹿鼎记差评,选角失败《鹿鼎记》作为金庸老先生的封笔之作,非常有特色。之前他写的小说中的主角不是像郭靖那样心怀天下的大英雄,就是像杨过、小龙女一类有情有义的归隐之士。但是韦小宝这个角色与这些都不一样……无意间发现父母的婚纱照,看到照片之后,儿子也瞬间不淡定了无意间发现父母的婚纱照,看到照片之后,儿子也瞬间不淡定了。对于爸妈年轻的时候的故事,儿子也是略有耳闻,看到父母的照片之后,儿子也打趣地说:妈妈,你高攀了我爸,当时我爸的葬……陈露语音曝光,陈露快接电话,不然老娘撕了你陈露与霍尊的事件已经发生一月有余了!本以为随着霍尊退出娱乐圈,该事件也随着结束了,然而随着陈露一系列新语音的曝光,让该事重新回到了大众视野。近日,网上传了一段陈露与霍尊的……甄子丹罕见秀恩爱!与小17岁娇妻对视超甜蜜,17岁女儿美过女近日,甄子丹夫妇在社交平台上晒出了一家四口合照和夫妇俩牵手对视照,可谓是深夜撒狗粮,简直甜到腻人,即便是两人相差17岁,但是依旧是超级甜蜜。镜头下的汪诗诗整个搭配也超级甜美少女……杨幂刚发了声明对网友算是种交代,最亲的人伤害你最疼的是心吧2018年1月16日,杨幂工作室在微博发表杨幂唐嫣被知乎网友刘空青恶意抹黑诋毁二人是塑料姐妹花,工作室发声明辟谣:将会通过法律维权。杨幂选择用法律保护自己。微博声明……辛巴女徒弟,千万粉丝吃播网红猫妹妹成名路上的3个贵人让千万粉丝上头的吃播女网红猫妹妹,未婚先孕又整容,争议不断引言。【本文主笔:七月】5月20日,千万粉丝大V网红猫妹妹晒出了未婚夫达少给自己送的礼物。视频里的她……小艺发布钱枫强奸自己部分视频,女孩醉酒无意识,钱枫拖行回家8月24日,一名小艺希望坏人被惩罚的网友发布了控诉自己两年前被钱枫强奸报警未果长文后,引起了网友们的热议,也让很多人对她有所质疑。因为从她的长文里,所有的信息其实都是可以……为什么会有剧怒症?从倪妮穿搭到赵露思的爱情,已然给出答案我们平时在看剧的时候,弹幕上会频频出现剧怒症这个词。那么,到底什么是剧怒症呢?为什么又会出现剧怒症这个词呢?所谓剧怒症,是指大家看到电视剧中非常不符合常理或令人心塞的情节……
陪你一起长大颖儿卑微,全职妈妈的天花板,从失去自我开始文银花(文章原创,欢迎光临)一口气追了8集《陪你一起长大》,让我感触最深的是,颖儿扮演的全职妈妈,真的太卑微了。昨天,颖儿为自己的新剧发文说:很感谢大家关心林……不和旁人生气,不和家人生气,不和自己生气关注微信公众号:今日在线母婴课堂,学习更多育儿知识,为人父母,一切努力只为守护孩子成长作者:樱桃来源:京博国学(ID:jingboguoxue)满目青山空念远……补充医疗保险是什么?怎么报销?【前言】补充医疗保险怎么报销?对门急诊、住院医疗费,医保统筹报销后由补充医疗保险对医保范围内剩余费用按合同比例支付,但自费部分补充医疗保险是同样不予支付(有特殊约定除外),需要……婴儿凉席4步挑选法绝不掉坑在给宝宝挑选凉席的时候妈妈们是不是都非常纠结不知道买那种那大家可以遵循一测二看三摸四闻这几个小原则一测测量婴儿床的尺寸选择购入合适的凉席不宜过大或过小否则宝宝……为了生儿子,女子偷偷服下转胎药,孩子2岁却变双性人本文由老苗手打原创,拒绝侵权抄袭转载。在医院工作,总能在不经意间看到这个世界的人情冷暖,看到人性赤裸的一面。小希(化名),孕妇一枚。因临产办理了住院,一起来的还有婆……实习医生带女友去值班室引争议你身边不守规矩的人,记得要远离前两天有网友爆料,北京大学人民医院一名实习医生,带女朋友去值班室,还冒充护士带到病房,看自己给病人拔尿管。随后该女友将自己在医院的经历,发在了社交平台。事情一经曝出……熙桓心理团队管理中,不可不知的囚徒困境合作是我们人类进化史上最伟大的成就之一。在现代社会,你很难想象事情可以由一个人完成,而不需要别人的帮助。我们所走的街道,我们所住的楼房,我们的每一份工作,都是来自于……每天坚持跟孩子说这7句话,他才会一天比一天更优秀!搜索瑞丁老爸启蒙学院,一站解决家长的教育困惑。让孩子拥有最有价值的童年!专家研究表明,除了吃饭、睡觉、上学,留给我们和孩子交流的时间,只有12分钟。……幼儿园里的穷孩子,大多有这些特征,老师一眼就能看出如今我们身边的学校也是多了起来,但既然大家都来到一个学校就不要有不同的看法,但哪些是穷人家的孩子,幼儿园老师一眼就能分辨出来。尽管孩子的和家长都会有所隐瞒,但无论如何掩饰……小学生表演单口相声火了这世上,有些弯路必须要走你永远都不知道,孩子身上藏着怎样让人惊喜的才艺!前不久,许多学校都举办了元旦联欢会。没想到,河北保定的一个小男孩因此上了热搜。原来,老师下课和同学们闲聊,想知道谁有……除夕之恋赶着团圆,赶着路程,除夕笼罩在云雾茫茫中,更显出它的飘逸与洒脱。从四方赶来的礼花飞向天籁,诉说着最后一天的依恋,它将深深的祝福化作点点美丽,抛向人间,点燃夜空的璀璨。你看……小苏打倒进啤酒里,真是太实用了,解决了好多家庭的一大烦恼摘要:小苏打学名叫碳酸氢钠,是一种白色结晶性粉末,它常用来做面包的发酵剂或者食品膨松剂,小苏打还有很强的去污能力,是一种天然的去污清洁剂;而啤酒是一种低酒精度的发酵酒,这两种毫……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网