chromiun 学习《一》
众所周知,Chrome是建立在开源的Chromium项目上的。
而且不得不说,学习并分析开源项目的代码对一个程序员的提高确实蛮大的。这篇博文我会记录一下学习过程中我遇到的一些问题,并分享学习中我所参考的几篇优秀的Chromium代码分析文章。
构建的一点吐槽和官方的方法文档摘录
- 尽量使用Visual Studio 2010 SP1 版本,不然precompiled headers模式可能会出现很多问题。由于Chromium中有大量的头文件,使用此选项大概能加速25%。
- 关闭杀毒软件,或者把.ilk, .pdb, .cc, .h文件加入白名单。再或者,把Chromium源代码目录加入杀毒软件白名单。
- 在一个没有虚拟内存交换的硬盘上构建Chromium。或者固态硬盘,如果可能的话。
- 使用ninja构建Chromium。这是Google专门为Chromium项目开发的构建工具链,笔者没有尝试,文档称使用ninja会让incremental linking过程快很多。
- 修改Visual Studio选项,减少同时链接的项目数量,以减少Chromium链接时所需要的内存。因为Chromium链接需要大量的内存,如果内存不足,大量的分页操作会大大降低系统的反应速度。"maximum number of parallel project builds"可以在Tools/Options/Projects and Solutions/Build and Run页面找到。这个选项可以减少Visual Studio启动的VCBuildHelper.exe实例数目。
- 修改include.gypi文件,减少同时执行的cl.exe的数目。默认情况下,Visual Studio会开启/MP选项,动用系统一切资源生成多个编译进程加速编译。但是由于Chromium项目过大,最差情况下一个cl.exe(链接器)可能会占用大约1G内存。
分析Chromium源码,为了快速的在代码海洋中找到自己所需要的部分,不可避免的要调试的Chromium项目。比如说,我们想知道,Chromium是如何从页面上下载一张图片,经过渲染,最后显示在页面上的呢?这个流程实际上的要比看起来复杂不少:一个页面内的WebKit分析出DOM树,发现一个<img>元素里的图片需要显示;WebKit发送一个URL下载的IPC消息给主进程Browser Process,然后WebKit根据返回数据的MIME类型标签进行解析,发现这个资源是个图片,再根据编码方式调用相应的WebCore::ImageDecoder类进行解码,最后还要进行一系列的渲染,把需要绘制的东西交给RenderWidget,这样我们才能看到图片。这个过程如果单纯的去浏览代码找到对应的类和方法调用关系,效率低下不说,还很容易出错,这时候我们就需要在Chromium中进行代码调试和追踪了。
- Chrome源码剖析 1~5 by duguguiyu。这位大神在08年Chromium刚公布源码后就进行了系统化并且通俗易懂的源码分析(说实话帮了我大忙~谢谢大神)。文章没有从代码上进行详细说明,而是从更高一层的设计层面分析了Chrome的不同组件,这是更难能可贵的。具体内容包括了Chromium的多线程任务模型、多进程浏览页模型,Chrome内的IPC消息传递机制,Chrome的图形渲染绘制流程。
- Chrome源码阅读 by zero_lee。这位作者主要从代码层面分析了多个Chrome内部类的作用和实现技巧,对于代码的理解很有帮助。
- Chromium研究 by chen.zhengyong。作者把眼光放在了Linux系统和嵌入式设备上的Chrome的开发和实现上。里面有很多绘制精美的UML图,值得一看。
- Chrome扩展开发文档中文版 by 360。360公司翻译的Chrome扩展开发文档,如果要写Chrome扩展(不是插件,扩展和插件在Chrome中是两种东西)大概会有用。
chromiun 学习《一》的更多相关文章
- chromiun 学习《二》 目录结构 +启动流程
1.chromium的目录结构. 2.先上分析图一张.主要是从BrowserMain进程进行分析的.
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
随机推荐
- Android驱动调试利器Busybox之初体验
工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手.WinCE串口调试助手.WinCE6.0寄存器访问工具.WinCE远程桌面助手和S3C24 ...
- SerializeField和Serializable
Serialize功能 Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系. 简单的说,在没有自定义Inspector的情况下所 ...
- TestLink学习三:发送邮件的两种配置方法
第一种:修改config.inc.php中的[smtp],配置为默认本地发送,用hotmail用户做接收,调试成功!(本人未尝试这种) // ----------------------------- ...
- java8-2 多态的概述
1.多态:同一个对象(事物),在不同时刻体现出来的不同状态. 举例: 猫是猫,猫是动物. 水(液体,固体,气态). 多态的前提: A:要有继承关系. B:要有方法重写. 其实没有也是可以的,但是如果没 ...
- Xcode视图调试
视图调试 使用视图调试器检查您的视图层次结构,可以轻松地判断视图位置.大小以及实现问题. 在XCode中运行你的应用程序,在调试栏上点击“调试视图层次”按钮,进入视图调试器. XCode停止你的应用程 ...
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine"问题
你的问题的原因是这样的,ASP.Net 2.0 增强了安全性,对一些有危害的http 头进行了判断,比如url中有空格的情况,以帮助网站提高网络攻击的防御能力.如果你的http头中有一些ASP.NET ...
- [5]Telerik Extensions for ASP.NET MVC 开发问题
1.Controller获取不到checkedNodes的问题 HTML @(Html.Telerik().TreeView() .Name("TreeView") ...
- 通信vue2.0组件
vue2.0组件通信各种情况总结与实例分析 Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用p ...
- Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- 挖Linux中的古老缩略语
[2005-06-22 15:23][Nigel McFarlane][TechTarget] <<阅读原文>> Unix已经有35年历史了.许多人认为它开始于中世纪,这个中世 ...