Chromium浏览器组件设计意图

在文章開始之前。我要叽歪几句,一上来就看Chrome的代码。简直晕头转向,摸来摸去莫不着头脑,好不easy看了一点点代码。却犹如瞎子摸象。无法众观全局。以下这篇小文,简介当中一个重要的模块--Component的设计,为我们阅读Google的代码打开思路。

概述

Chrome浏览器组件是一个google的一个项目。它用来不断的模块化Chrome的代码。

把整个content模块从src/chrome文件夹下抽取出来,虽然组件项目付出了不少努力,到眼下为止,这个文件夹(src/chrome)仍然是最大的互相依赖的模块。

因此,抽取src/chrome子模块仍然是google团队下一步的工作之中的一个。

目标

众所周知,Chrome项目在过去几年中,不管是代码还是复杂度都增长了很多。

对这个项目贡献代码的人员数量也添加了很多。并且。google也添加了很多目标平台以及配置,这些并没有在项目启动初期被他们预见到得到。对每一个人来说,要理解整个架构变得越来越难。更别说全部代码了。

Chrome浏览器组件项目引入了模块化并强制运行,目标例如以下:

  • 按比例增大架构,使得浏览器更适合需求变更。比方:使用src/chrome/browser模块的浏览器希望关掉或者又一次实现某些模块。比方安卓上的Chrome;
  • 通过进一步实现依赖关系图,我们想要实现的架构变得更清晰。

    那些依赖规则指出哪些子模块是同意的。哪些是不同意的。
  • 大大简化了src/chrome子模块的依赖关系图,使他们不循环依赖;
  • 通过添加很多独立的组件比方单元測试可运行程序来加速开发人员的浏览器构建过程。

    降低最大组件的连接时间。比如browser组件。单元測试程序更小了,这有利于大家用gdb调试代码。或者通过printf高速便利代码。
  • 上面提到的方法应该能够降低大家的担忧、也让google团队更easy合作,使得架构更不easy误解,同一时候不easy写出不好的架构来,通常也会使我们更高效。

设计

概览

1 把src/chrome文件夹提取出一个个的组件。这些组件变成了一个个的目标,他们有自己独立的单元測试目标,明白指定他们的依赖。没有循环依赖。

2 没有循环依赖

指的是组件并不认识自己的使用者(embedder)--嵌入组件的模块比如src/chrome。假设组件须要获得自己使用者的信息和服务,他们能够在初始化的时候获得。或者执行时通过抽象的client接口获得。这个client接口由组件定义、使用者(embedder)来实现。

3  组件在哪里?

在src/components/的子文件夹里。

  • 注意: 一些模块更像一个抽象层--比方src/content、或者更像一个产品--比方src/chrome,这些模块应该有自己的顶级文件夹,而不应该放到src/components文件夹下。

4 Client接口在哪里?

他们的声明在每个组件里,而实如今组件的使用者那里。

5  组件有必要提供API给组件的使用者调用吗?

A: 通常说来。例如以下使用方法是没问题的:组件的使用者採用C++类的详细类来使用组件。这样的情况下,API是非常easy的,不管组建类是什么--组件收到指针。实现来自使用者的托付接口。某些情况下,google引入了全然抽象的API给组件的使用者调用,这些API隐藏了组件的实现细节。就像他们给src/content组件做的一样。

某些其它情况下,他们给组件的C++详细类分分类,一部分分到内部类,一部分分到public类里。不管是内部类还是外部类,他们都应该存在于组件文件夹下,比如:src/components/mycomponent/public/.
假设一个组件的public分类存在,组件的client接口应该存在那里。

部分參考:http://www.chromium.org/developers/content-module

本文属原创,转载请注明出处,违者必究

关注chromium群480089700。或者微信公众平台:程序猿互动联盟(coder_online),你能够第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友。在线交流编程经验。获取编程基础知识,解决编程问题。程序猿互动联盟,开发者自己的家。

时间: 2024-10-05 04:58:28

Chromium浏览器组件设计意图的相关文章

【转载】COM 组件设计与应用(十七)——持续性

原文:http://vckbase.com/index.php/wv/1264.html 一.前言 我们写程序,经常需要实现这样的需求: 例一.程序运行产生一个窗口,用户关闭的时候需要记录窗口的位置,以便下次运行时保持位置不变: 例二.由于程序运行时间很长,今天执行一部分,明天继续执行.那么在下次运行前要恢复前次的状态: ... ... ... ... 智慧的老师:以上这些需求,如何实现呢? 懵懂的学生:这个简单,只要在程序退出前提取必要的信息保存到文件中,下次运行时再从文件中读出来,设置一下就

【转载】COM 组件设计与应用(一)——起源及复合文件

原文:http://vckbase.com/index.php/wv/1201.html 一.前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦.你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2).功夫不负有心人,终于买到了我的第一本COM书<OLE2 高级编程技术>,这本800多页的大布头花费了

HT图形组件设计之道(三)

上篇我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动,这类案例后续文章还会继续以便大家掌握更多的矢量应用场景,本篇我们先切换个话题,谈谈模型-视图-事件之间的关系. 图形组件设计架构上主要就是在规划Data模型,View视图和Event事件之间的关系,这些年业界逐渐将各种GUI设计模式提炼成理论归类,MVC.MVP和MVVM的主要大类常被统称为MV*,有很多文章进行各种设计模式的定义和比较,本篇不打算深入展开理论的讨论,不同图形

HT图形组件设计之道

咱们号码大全经过定制了CPU和内存展示关键词挖掘工具界面,体会了HT for Web经过界说矢量完成图形制作与事务数据的代码解耦及绑定联动,这类事例后续文章还会持续以便咱们把握更多的矢量使用场景,本篇咱们先切换个论题,谈谈模型-视图-事情之间的联系. 图形组件计划架构上首要即是在计划Data模型,View视图和Event事情之间的联系,这些年业界逐步将各种GUI计划形式提炼成理论归类,MVC.MVP和MVVM的首要大类常被统称为MV*,有许多文章进行各种计划形式的界说和对比,本篇不计划深化翻开理

COM组件设计与应用(一)——起源及复合文件

本文摘自:http://blog.vckbase.com/teacheryang/archive/2005/06/27/8883.html 一.前言 公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:"小杨呀,以后写程序就和搭积木一样啦.你赶快学习一些OLE的技术吧......",当时我心里就寻思 :"开什么玩笑?搭积木方式写程序?再过100年吧......",但作为一名听话的好学生,我开始在书店里"踅摸"(注1)有关OLE的书籍(注2).功

chromium浏览器开发系列第三篇:chromium源码目录结构

上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己.官网只能作为一个参考. Chromium结构相对两年前变化很大.目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器,webkit.浏览器是主要的进程,代表所有的UI和I / O.渲染通常是每个tab页的子过程,是由浏览器驱动.Webkit做布局和渲染. 简单介绍解决方案文件:

Android应用程序框架之无边界设计意图

Android的应用框架的外特性空间的描述在SDK文档有十分清楚的描述,Android应用的基本概念,组件生命周期等等有详细的描述.在外特性空间中,Android提供了Activity,Service,Broadcast receivers,Content Provider,Intent,task等概念,我在这里不讨论这些概念定义,因为SDK文档已经讲得够详细. 在阅读SDK文档和研究Activity这个概念时,我感觉到了在Android中若隐若现的Android自由无边界这个设计意图.Andr

HT全矢量化的图形组件设计

HT一直被客户称道的就是其全矢量化的设计特色,矢量相比传统图片好处太多了: 矢量可无级缩放,界面不失真不模糊 描述矢量的文本内容远比图片小得多 目前各种window.devicePixelRatio不一致的设备,矢量可能是唯一彻底的解决方案 业务数据绑定 提起矢量一般都会想到SVG,但这是个坑人的玩意儿,这么多年就没见一个完善的实现者,浏览器实现千差万别,高级属性根本不能玩,Adobe SVG Viewer好多年前就停止更新,Flex支持SVG导入也仅供基本属性玩玩,当然SVG也不是一无是处hi

chromium浏览器开发系列第三篇:chromium源码目录说明

上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己.官网只能作为一个参考. Chromium结构相对两年前变化很大.目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器,webkit.浏览器是主要的进程,代表所有的UI和I / O.渲染通常是每个tab页的子过程,是由浏览器驱动.Webkit做布局和渲染. 简单介绍解决方案文件: