chromium源码学习笔记(1) -- 学习计划

 
    对于c++开发者来说,chromium几乎是目前最值得学习的优秀开源代码。先看看chromium包含了多少令人激动的特性:

    1,出身google,代码质量几乎不用怀疑,肯定能让你学到不少东西;
    2,以webkit作为浏览器内核,单就webkit本身的魅力就足够吸引我们了;
    3,基于众多第三方开源库的跨平台的桌面应用程序框架;
    4,基于多进程的程序架构;
    5,闻名的V8 js解析内核;
    6,html5。
 
    chromium的代码量非常大,要想有效率的学习,需要找个最好的方法,定个计划。先来看看chromium的整体结构和代码组织:Getting Around the Chromium Source Code Directories。chromium设计主要分为三部分:browser,renderer和webkit。代码块主要包括:src/chrome/app(主程序逻辑代码),src/base(common库),src/chrome/browser,src/chrome/renderer,src/chrome/common(browser和renderer的common库),src/webkit等。src源码文件夹下的子文件目录的意义参考上面链接中的说明。
    
    根据以上信息,我们列一下要学习chromium代码的哪些部分:
 
    1,主程序控制逻辑;
    2,多进程架构,多进程及多线程管理和通信;
    3,消息循环;
    4,UI系统;
 
    5,web page和tag管理;
    6,js解析,V8内核;
    7,页面渲染;
    8,webkit;
 
    9,跨平台技术;
    10,第三方库;
    11,浏览器安全及sandbox;
    12,插件系统;
 
    13,gpu渲染;
    14,自动化测试系统;
    15,crash汇报系统(breakpad);
    16,html5:websocket,media,storage等;
    17,设计模式;
    18,win8特性;
    ...
 
    怎样制定学习的步骤?这是一个很重要的问题。一个基本思路是,从上至下,从整体到局部,
从框架到细节。因此总的计划是分成三个阶段,
 
一阶段着眼系统全局和框架设计(忽略不重要的部分),主要包括:主程序逻辑、进程线程架构、消息循环、UI、webkit整合、web渲染等;
 
第二阶段着眼感兴趣的关键技术,比如:跨平台,html5,gpu渲染等;
 
第三阶段研究前两阶段中未涉及的部分,从不同的角度进行学习,比如跨平台渲染,内存管理,log系统,http和https封装,设计模式以及更细节的技术点等。
 
    最后,时间计划。今年工作会很忙,但依然要挤时间坚持,希望第一阶段能尽快完成。
    
    整个系列以笔记的方式总结,希望能沉淀下一些切实的收获。

chromium ③的更多相关文章

  1. QT5利用chromium内核与HTML页面交互

    在QT5.4之前,做QT开发浏览器只能选择QWebkit,但是有过使用的都会发现,这个webkit不是出奇的慢,简直是慢的令人发指,Release模式下还行,debug下你就无语了,但是webkit毕 ...

  2. Google之Chromium浏览器源码学习——base公共通用库(一)

    Google的优秀C++开源项目繁多,其中的Chromium浏览器项目可以说是很具有代表性的,此外还包括其第三开发开源库或是自己的优秀开源库,可以根据需要抽取自己感兴趣的部分.在研究.学习该项目前的时 ...

  3. 如何在windows上编译Chromium (CEF3) 并加入MP3支持(二)

    时隔一年,再次编译cef3,独一无二的目的仍为加入mp3支持.新版本的编译环境和注意事项都已经发生了变化,于是再记录一下. 一.编译版本 cef版本号格式为X.YYYY.A.gHHHHHHH X为主版 ...

  4. 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持

    一.什么是CEF CEF即Chromium Embeded Framework,由谷歌的开源浏览器项目Chromium扩展而来,可方便地嵌入其它程序中以得到浏览器功能. CEF包括CEF1和CEF3两 ...

  5. 构建基于Chromium的应用程序

    chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由度,2013年google决 ...

  6. ubuntu中chromium无法播放flash,安装flash

    ubuntu14.0.4中系统自带的chromium无法播放flash,后来查了下,得知chromium已经不支持adobe flash了,用户可使用pepper flash替代.安装pepper f ...

  7. windows下编译chromium浏览器的15个流程整理

    编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...

  8. Google之Chromium浏览器源码学习——base公共通用库(二)

    上次提到Chromium浏览器中base公共通用库中的内存分配器allocator,其中用到了三方库tcmalloc.jemalloc:对于这两个内存分配器,个人建议,对于内存,最好是自己维护内存池: ...

  9. 浏览器-10 Chromium 移动版

    移动版 chromium 的iOS版和Android是为两个流行的移动操作系统设计的, UI方面进行了 较大的重新设计; 两者从外观上看颇为相似,但是其内部的渲染引擎的差别非常的大,原因在于iOS对应 ...

  10. 浏览器-09 javascript引擎和Chromium网络栈

    语言的运行 C/C++语言 使用编译器直接将它们编译成本地代码(机器指令),这是由开发人员在代码编写完成之后实施; 用户只是使用这些编译好的本地代码,这些本地代码被系统的加载器加载执行,由操作系统调度 ...

随机推荐

  1. jq 倒计时

    引入jq 注 在IE和safari 如果时间出现NAN 将时间格式改为YYYY/MM/DD HH:MM:SS 例:var d2 = new Date("2019/02/18 15:59&qu ...

  2. eth

    今天说下Centos的eth0:0这个虚拟端口,应为学到ifcofig eth0:0 IP,可以给一个网卡设置俩个IP地址,但是只是临时设置,然而我想永久设置,所以就在网找,最终找到的方法是 可以先复 ...

  3. 利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验

    前期准备 引入phpqrcode类库(下载地址:https://sourceforge.net/projects/phpqrcode/) PHP开启GD扩展库支持 1.利用phpqrcode生成二维码 ...

  4. 20165309 实验二 Java面向对象程序设计

    2017-2018-2 20165309实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...

  5. 在word中粘贴的图片为什么显示不完整

    一.背景 整理系统测试说明文档,截得图片粘贴到word中显示不完整. 二.错误问题 问题:在word中粘贴的图片为什么显示不完整,如图所示: 三.分析问题: 原因是原来设置的行间距是固定值,图片也作一 ...

  6. 关于.babelrc中的stage-0,stage-1,stage-2,stage-3

    文章链接:https://www.cnblogs.com/chris-oil/p/5717544.html

  7. java的同步实现

    在java编程中,经常需要用到同步,而同步的实现使用最多的就是synchronized关键字了. synchronized关键字涉及到“锁”的概念,首先先了解一下相关锁的知识. java的内置锁:每个 ...

  8. HDU-2586-裸LCA入门-tarjan离线

    http://acm.hdu.edu.cn/showproblem.php?pid=2586 给出一颗树和边权,询问两点距离. 考虑tarjan离线做法,做法很巧妙,当前进行到u,对他的儿子v,当v子 ...

  9. Windows下Python3.6安装第三方模块

    一 安装pip 一般需要用pip进行安装,不过我安装p3.6的时候pip已经有了. 如果没有的话,可以用在以下http://www.lfd.uci.edu/~gohlke/pythonlibs/#pi ...

  10. js向一个数组中插入元素的几个方法-性能比较

    向一个数组中插入元素是平时很常见的一件事情.你可以使用push在数组尾部插入元素,可以用unshift在数组头部插入元素,也可以用splice在数组中间插入元素. 但是这些已知的方法,并不意味着没有更 ...