GoogleChrome浏览器架构解析
- 格式:pdf
- 大小:530.62 KB
- 文档页数:26
chromium 结构
Chromium的结构包括以下几个部分:
1. Browser(浏览器进程):运行用户界面(UI)以及管理标签页和插件的主进程。
2. Renderer(渲染进程):每个标签页都有自己的渲染进程,负责解析HTML和CSS,并将网页渲染成像素。
3. GPU Process(GPU进程):如果用户正在使用需要GPU加速的功能,比如WebGL或者视频解码,Chromium会为这些功能启动一个独立的GPU进程。
4. Network Process(网络进程):处理所有的网络请求,以提供更快的网络性能和更好的安全性。
5. Utility Process(实用工具进程):运行一些辅助任务,比如下载管理、扩展安装等。
Chromium使用多进程架构,每个进程都有自己的地址空间,以提供更高的安全性和稳定性。
当某个标签页崩溃时,它只会影响到该标签页的渲染进程,而不会影响到其他标签页或者整个浏览器。
这种架构也有助于隔离不同的标签页和插件,防止它们之间的相互干扰。
浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知。
今天异次元就跟大家说说关于浏览器核的一些事儿吧,好让你了解多一点稍微在的东西。
在下面的文章中主要介绍一些常见的浏览器核和JavaScript引擎,部分容来自于我在网上找到的资料,还有一些是我自己的理解,不保证完全正确,但是大致应该是没错的。
如果有误,请指正……一、浏览器核(排版引擎/渲染引擎)首先解释一下浏览器核是什么东西。
英文叫做:Rendering Engine,中文翻译很多,排版引擎、解释引擎、渲染引擎,现在流行称为浏览器核,至于为什么流行这么称呼,请自行领悟。
Rendering Engine,顾名思义,就是用来渲染网页容的,将网页的代码转换为最终你看得见的页面。
因为是排版,所以肯定会排版错位等问题。
为什么会排版错位呢?有的是由于本身编写不规,有的是由于浏览器本身的渲染不标准。
现在有几个主流的排版引擎,因为这些排版引擎都有其代表的浏览器,所以常常会把排版引擎的名称和浏览器的名称混用,比如常的说IE核、Chrome核。
其实这样子是不太合理的,因为一个完整的浏览器不会只有一的排版引擎,还有自己的界面框架和其它的功能支撑,而排版引擎本身也不可能实现浏览器的所有功能。
下面罗列一下几款主流的排版引擎和浏览器。
1、Trident 核(Windows)Trident 就是大名鼎鼎的IE浏览器所使用的核,也是很多浏览器所使用的核,通常被称为IE核。
基于Trident核的浏览器非常多,这是因为Trident核提供了丰富的调用接口。
老的Trident核(比如常说的IE6核)一直是不遵循W3C标准的,但是由于当时IE6的市场份额最大,所以后果就是大量的网页专门为IE6等老Trident核编写,在IE6下显示很正常,但其实这些网页的代码并不符合W3C标准,于是,完全依据W3C标准写的网页在老的Trident核下面又出现偏差,这就是为什么很多人觉得后来的IE9的网页排版有时会乱了,而IE6则正常,其实不是浏览器兼容性差了,而是你访问的网页不符合新的标准。
一、物理基础架构平安谷歌数据中心包括了生物识别、金属感应探测、监控、通行妨碍和激光入侵感应系统等多层物理平安爱护,并做了严格的限制访问。
由于谷歌的某些服务托管在第三方数据中心,为了确保确定的平安把握,必需部署此类高度平安措施。
硬件设计部署谷歌数据中心网络由数千台服务器组成,这些服务器的主板和网络设备都由谷歌自行定制设计,相关设备组件和供应商都必需经过严格的平安检测和背景审查。
同时谷歌也本人设计了平安芯片,这些芯片被广泛应用于服务器和相关外设环境,为硬件级别的平安识别和认证供应了有效的平安手段。
平安引导和服务器识别机制为了确保正确的服务启动,谷歌服务器使用了一系列的启动引导技术,包括在 BIOS、bootloader、kernel 和系统镜像等底层组件中使用加密签名,这些签名在每次启动和更新时都能进行平安验证。
整个过程中涉及的组件都由谷歌构建、把握和加固。
随着硬件的更新换代,谷歌也在不断努力进行平安改进,比如自行设计了可锁固件芯片、平安微把握器和平安芯片,并依据不同服务器的设计版本,在各类芯片中内置了可信的平安启动机制。
在软件引导和硬件启动过程中,数据中心的每台服务器都有本人独特的标识身份,这些标识也被用于机器底层管理的 API 调用验证。
另外,谷歌也开发了自动更新检测系统,以保证各类软硬件的准时更新、识别和诊断,必要时可以自动隔离那些消灭毛病的服务器。
二、平安服务部署此节中,将对一些基本的软硬件服务平安进行引见,数千台服务器将对这些服务应用恳求进行伺服和备份,这些服务包括 Gmail 的 SMTP 服务、分布式数据存储服务、YouTube 视频转码服务、客户端 APP 沙箱运转服务等常规用户恳求。
全部运转于基础设备架构的服务恳求都由一个叫 Borg 的集群业务管理服务进行把握。
服务标识、完整性与隔离在内部服务的应用层通信之间,谷歌使用了加密认证授权方式,为管理和服务供应了高强度的访问把握。
虽然谷歌不完全依靠内部网络划分和防火墙作为次要平安机制,但为了防止 IP 哄骗等进一步攻击,谷歌在网络入口和出口的各种不同点位使用了过滤策略,这种方法也最大化地提高了网络功能和可用性。
1楼发表于2010-6-3 23:25 |只看该作者|倒序浏览|打印《卡饭月刊》第25期发布(2011.04)--崭新的起点,崭新的开始!3楼发表于2010-6-3 23:27 |只看该作者Chrome源码剖析【三】【三】Chrome的进程模型1. 基本的进程结构Chrome是一个多进程的架构,不过所有的进程都会由老大,Browser进程来管理,走的是集中化管理的路子。
在Browser进程中,有xxxProcessHost,每一个host,都对应着一个Process,比如RenderProcessHost对应着RenderProcess,PluginProcessHost对应着PluginProcess,有多少个host的实例,就有多少个进程在运行。
这是一个比较典型的代理模式,Browser对Host的操作,都会被Host封装成IPC消息,传递给对应的Process 来处理,对于大部分上层的类,也就隔离了多进程细节。
2. Render进程先不扯Plugin的进程,只考虑Render进程。
前面说了,一个Process一个tab,只是广告用语,实际上,每一个web页面内容(包括在tab中的和在弹出窗口中的...),在Chrome中,用RenderView 表示一个web页面,每一个RenderView可以寄宿在任一一个RenderProcess中,它只是依托RenderProcess 帮助它进行通信。
每一个RenderProcess进程都可以有1到N个RenderView实例。
Chrome支持不同的进程模型,可以一个tab一个进程,一个site instance一个进程等等。
但基本模式都是一致的,当需要创建一个新的RenderView的时候,Chrome会尝试进行选择或者是创建进程。
比如,在one site one process的模式下,如果存在此site,就会选择一个已有的RenderProcessHost,让它管理这个新的RenderView,否则,会创建一个RenderProcessHost(同时也就创建了一个Process),把RenderView交给它。
随着网络技术的发展,越来越多应用都已经离不开网络,特别像人类大脑一样的知识库的搜索引擎,更加是离不开功能强大的云计算。
不过,即便云计算非常强大,但它还不能直接地把结果呈现给用户,这样就需要一个客户端来呈现出来,这个客户端就是浏览器。
现在越来越多人上网,他们每一次上网,都离不开浏览的使用,这已经是一个不可缺少的软件了。
这里介绍和分析谷歌推出有创新的浏览器,它的速度比其它浏览器快很多,那么它是怎么实现的呢?又采用了什么样的技术能达到这样呢?又比如它的标签页是每一个进程进行显示的,这到底又是怎么样实现的呢?下面来通过分析它的源码,一一地解开这种高新技术的使用,以及这种高效算法的奥秘。
谷歌浏览器的英语名称为Chrome,它的意义是铬。
铬是一种有光泽的、蓝灰色的坚硬金属元素。
不失光泽,抗腐蚀,最早在铬铁矿中发现。
用作催化剂,可加强钢合金的强度和生产不锈钢,可以做防腐镀层和玻璃制品中的颜料。
原子序数24;原子量51.996;比重7.18;化合价2,3,6。
谷歌起这个名称,可能是想让这个浏览器永远不失去光泽,永远那么吸引人。
铬是无毒,化学性质很稳定,有延展性,含杂质时硬而脆。
熔点1857C,沸点2672C,密度单晶为7.22克/厘米3,多晶为7.14克/厘米3;铬,原子序数24,原子量51.9961。
铬的名称来自希腊文Chroma,意为颜色。
因为这种元素以多种不同颜色的化合物存在,故被称为“多彩的元素”。
可用于制不锈钢,汽车零件,工具,磁带和录像带等。
铬镀在金属上可以防锈,也叫可多米,坚固美观。
红、绿宝石的色彩也来自于铬。
作为现代科技中最重要的金属,以不同百分比熔合的铬镍钢千变万化,种类繁多,令人难以置信。
谷歌的开发人员称,虽然网络的发展日新月异,但作为网络平台的浏览器,却没有跟上网络发展的步伐。
谷歌倾心打造的免费浏览器就是希望能跟随着网络的发展而不断升级换代,完美的切合网络时代的潮流。
据了解,谷歌员工每天使用的最多的应用程序就是浏览器,通过浏览器,查看新闻资讯,观看视频聊天,玩网络游戏。
详解GoogleChrome浏览器(操作篇)(上)开篇概述在上篇博客中⼀⽂中,主要讲解了Chrome 搜索引擎使⽤、Chrome安装和基本操作、Chrome 基本架构、多线程等原理性问题,这篇将重点讲解Chro-me实操问题,主要结合“Chrome 主调试⾯板“,对Chrome,Elements,Con-sole,Sources,NetWork,TimeLine,Profiles,Application,Security,Audits进⾏详解。
若对⼴⼤读者朋友有所帮助,我将不胜感激。
本篇博⽂主要从当然了,在阅读本篇⽂章前,强烈建议⼤家先阅读⼀⽂。
如此,对本篇⽂章的理解,也许会更加容易些。
温故⽽知新1、Chrome基本架构图和Chrome主调试⾯板2、Chrome DevTools 调试⾯板简要介绍正⽂⼀、Elements⾯板概述定义: Inspect and Edit Pages and Styles by Elements panel,but also effective immediately.译⽂:通过Elements ⾯板,不仅仅可以查看和编辑页⾯和样式,⽽且所做的改变⽴即⽣效。
详解第⼀部份:操作DOM1、查看DOM树打开Element⾯板,可以查看所有DOM节点,包括CSS和JavaScript,如下图所⽰,左侧为DOM树,右侧为CSS样式。
2、选取DOM节点将⿏标移到⽹页中的某元素上⾯,该元素会发⽣变化如下图所⽰:3、点击DOM树p节点元素,即可选中。
这时,会发现Element⾯板中的DOM树发⽣了变化,如下图所⽰:注释:选中的p节点在DOM树中被精确定位(蓝⾊背景),可以看到p节点的DOM层次(红⾊⽅框),在⾯板右侧,是p节点的CSS样式。
当然,也可以在Element⾯板的DOM树中选取DOM节点。
将⿏标放到相应的DOM节点上,会发现⽹页中相应的节点也发⽣了变化,点击该节点,即可选中。
Chrome UI框架分析一、总体结构1、概述代码结构UI部分的通用代码放在src/chrome/views目录下。
其中:control目录中为各种控件,如Label、Textfield等,这个目录最为庞大。
widget目录中为系统相关的UI底层细节,特别是UI消息机制。
window目录中为UI Frame相关的细节,例如窗口的标题栏、系统按钮以及、Frame、Dialog等的代理接口。
focus目录下为焦点管理、快捷键相关代码。
animation中为与动画相关的代码。
主要特点1、采用DUI技术,大部分窗口和控件都是DUI的。
2、虚窗口的基类是View,每个View可以包含子View,他们组织成一棵树结构。
3、真窗口的基类是Widget,它处理与操作系统相关的最原始的消息,在windows上,它处理所有窗口消息。
Window是顶层窗口的基类,包括气泡、漂浮窗口、对话框、主窗口等。
4、View树的根节点是RootView,这个View的主要用途就是从Widget中接收UI消息,进行分发,包括排版与绘制,它是整个窗口树的根。
5、NonClientView表示整个实际的窗口树的根,是RootView唯一的子节点。
RootView向上和OS层打交道,而NonClientView则专注于下层的控件View。
NonClientView表示整个非客户区的View,包括标题栏、窗口图标、关闭按钮、最大化与最小化按钮、边框等,它负责非客户区的排版与绘制,这类可以被派生,以实现各种不同的客户区。
ClientView是客户区的根,负责客户区的排版与绘制。
6、排版由专门的LayoutManager负责。
7、界面绘制上,绘制引擎(Canvas)与窗框系统分开。
可以根据实际情况使用不同的图形引擎(Skia与D2D)。
一般情况下,绘图采用Skia,字体用windows的GDI,Skia保证可以跨平台。
绘制引擎提供了裁剪、平移变换等机制,使得View可以只重绘一部分,而且支持紧急与非紧急绘制。
【一】Chrome的多线程模型0. Chrome的并发模型如果你仔细看了前面的图,对Chrome的线程和进程框架应该有了个基本的了解。
Chrome有一个主进程,称为Browser进程,它是老大,管理Chrome大部分的日常事务;其次,会有很多Renderer进程,它们圈地而治,各管理一组站点的显示和通信(Chrome在宣传中一直宣称一个tab对应一个进程,其实是很不确切的…),它们彼此互不搭理,只和老大说话,由老大负责权衡各方利益。
它们和老大说话的渠道,称做IPC(Inter-Process Communication),这是Google搭的一套进程间通信的机制,基本的实现后面自会分解。
不论是Browser进程还是Renderer 进程,都不只是光杆司令,它们都有一系列的线程为自己打理各种业务。
对于Renderer进程,它们通常有两个线程,一个是Main thread,它负责与老大进行联系,有一些幕后黑手的意思;另一个是Render thread,它们负责页面的渲染和交互,一看就知道是这个帮派的门脸级人物。
相比之下,Browser进程既然是老大,小弟自然要多一些,除了大脑般的Main thread,和负责与各Renderer帮派通信的IO thread,其实还包括负责管文件的file thread,负责管数据库的db thread等等(一个更详细的列表,参见这里),它们各尽其责,齐心协力为老大打拼。
它们和各Renderer进程的之间的关系不一样,同一个进程内的线程,往往需要很多的协同工作,这一坨线程间的并发管理,是Chrome最出彩的地方之一了。
1. Chrome的线程模型仔细回忆一下我们大部分时候是怎么来用线程的,在我足够贫瘠的多线程经历中,往往都是这样用的:起一个线程,传入一个特定的入口函数,看一下这个函数是否是有副作用的(Side Effect),如果有,并且还会涉及到多线程的数据访问,仔细排查,在可疑地点上锁伺候。
Chrome源代码结构首先,开始接触Chrome的童鞋可能有一个疑惑,Chrome和Chromium 是同一个东西吗?答案是,Chrome是Google官方的浏览器项目名称,Chromium是Google官方对Chrome开源项目。
说白了就是Chrome是Google自己的官方浏览器版本,而Chromium是开源项目,所有有兴趣的开发者都可以参加,Chromium中出现的新技术如果经过测试是可靠的,健壮的,那么将可能会出现在未来发布的Chrome官方版本中.因此,Chrome版本更新速度要远远小于Chromium的更新速度。
在本文中,笔者为了偷懒,直接用项目名称Chrome指代Chromium,废话不多说了,开始为潜入Chrome源代码的海洋作准备了.源代码目录树Chrome项目是一个非常庞大的项目工程,包含的工程(Project)数量超过了500个,全部代码加在一起超过4G,全部编译完成将消耗将近30G 的磁盘空间,不愧为恐龙级别的软件项目工程.面对Chrome浩如烟海的源代码,我们怎么读呢?很显然,一个文件一个文件的看,逐行分析是不现实的,我们必须先从整体来把握整个Chrome工程,然后逐步细化去了解每个具体模块的功能,并且对你所感兴趣的部分模块进行最后的深入分析。
分析任何一个大型软件项目的源代码,我们首先要做的事是参考官方文档我们可以很快掌握项目中各个工程之间的依存关系,了解项目中每个模块的大致功能,并且可以很快地找到源代码分析的入口点。
下面图1所展示的是在Visual Studio 2008中,Chrome项目的源代码目录树结构,不同的Chrome版本的源代码目录树可能有一些差别,但其主要某块的结构变化不大。
虽然Chrome整个源码工程很庞大,但其代码结构是非常清晰的,代码质量非常高,代码的风格统一,这将是为后续代码分析提供便利。
基于Visual Studio 2008那强大的可视化调试功能,童鞋们只要掌握好分析的粒度,从粗到细,从整体到局部逐渐深入,从面到点,通过在关键部分设置端点,有目的的去跟踪代码执行流程,很快就进入状态.下面将逐一介绍Chrome源代码中主要工程模块的功能。
那么现在将要深⼊BrowerProcess和 RenderProces⾥⾯去,揭开⾥⾯有多少线程,线程间怎样交互。
考试⼤提⽰现有问题: BrowerProcess中有UI显⽰部分,消息接受部分,HTTP页⾯下载部分,然后其他⼀系列读取COOKIE,写⽂件,读写数据库,等操作是怎么协调?怎么分⼯的?之间⼜是怎么交互的? RenderProces中渲染部分和接收 BrowerProcess消息部分是怎么交互的? RenderProces是怎么发送消息的到BrowerProcess中的? 注意为了⽅便理解这⾥先还是先抛开PluginProcess和sanbox不讲。
按照上⾯的问题本章打算分三部分介绍: ⼀:BrowerProcess 中的线程 ⼆:RenderProces中的线程 三:BrowerProcess和RenderProces线程交互流程。
⼀:BrowerProcess 中的线程 BrowerProcess⾥⾯的线程很多,其中最重要的是IO线程和UI线程。
除了这两个线程,还有管理数据库读写的DB线程,管理本地⽂件读写的FILE线程等等。
要研究每个线程⾸先我们得了解每个线程的职能。
UI线程顾名思义,管理UI以及UI的消息循环,但是IO线程不能太顾名思义了,IO线程主要有两⽅⾯的职能,接收进程间消息(包括渲染进程和插件进程的消息),还有个职能是接收络消息所有HTTP页⾯的下载的消息也由这个线程处理转发,不过除了⽤IO来表⽰这个线程也想不出来更好的名字了J。
可以先参看下 How Chromium Displays Web Pages 上⾯的介绍,先引⽤⼀张上⾯的图⽚: (BrowerProcess基本的线程结构) ⼀个页⾯是怎样被创建的呢? 先弄清楚下⾯⼏点说明: 1:⼀个BrowerProcess⾥⾯保存⼀个Browser的列表,每个Browser对象代表着⼀个浏览器窗⼝。
2:每个Browser对象⾥⾯保存⼀个WebContents列表(这个列表是⽤了⼀个TabStripModel的对象来封装),WebContents就是浏览器上⾯的HTML页⾯和标签。
谷歌Chrome各版本解析
谷歌Chrome各版本解析
无
【期刊名称】《软件和信息服务》
【年(卷),期】2010(000)005
【摘要】Chrome浏览器是互联网巨人谷歌最重要的产品之一。
调研机构NetApp统计显示,目前Chrome浏览器市场份额已突破5%,并有望在今年年底达到10%。
这对仅诞生一年半的Chrome实属难得。
【总页数】1页(P.10-10)
【关键词】谷歌;解析;版本;NetApp;统计显示;市场份额;浏览器;互联网
【作者】无
【作者单位】不详
【正文语种】英文
【中图分类】TP393
【相关文献】
1.《eWeek》:必应将成为谷歌劲敌的十大理由 [J], 无
2.谷歌Chrome17首个Dev开发版本己发布 [J],
3.谷歌开卖电子书 [J], Brad Stone
4.e览天下——10款常用浏览器横向评测 [J],
5.面目全非——DotA新版本
6.60改动全解析 [J], 新疆大串
以上内容为文献基本信息,获取文献全文请下载。