淘客熙熙

主题:【原创】Chrome程序初探(序) -- 素里太守

共:💬73 🌺137 新:
分页树展主题 · 全看首页 上页
/ 5
下页 末页
  • 家园 【原创】Chrome程序初探(序)

    Chrome用了几天,GOOGLE相关的设计文档也读了个7788,程序的源码在自己的机器上用VS 2008 build完毕。然后,然后......俺就准备在河里写个小系列。

    关于Chrome的程序结构的小系列。

    河里的IT大牛不少,俺的文笔也差,不知道这种很枯燥的代码结构分析有没有人喜欢?毕竟这条河也不是“专业”的IT论坛。

    管它作甚,大不了“身败名裂” --- 从此不再河里讨论这种纯IT技术的东西。再说了,河里不是鼓励“原创”吗!

    下面是提纲:

    1.Chrome进程管理.

    2.Chrome程序框架.

    3.browser.

    4.Renderer与Sandbox

    5.Webkit.

    6.V8

    7.Plugin.

    8.Chromium中的测试工具.

    9.其他.

    还是那句话:反映好的话俺就写,反映不好......

    关键词(Tags): #plugin#分析#源码#Chrome#浏览器元宝推荐:铁手,

    本帖一共被 2 帖 引用 (帖内工具实现)
    • 家园 Chrome Beta测试结束,正式发行在即。

      Chrome正式版不日即将推出,版本号1.0.154.36,实际上是0.4.154.33.

      All users will get updated to the latest release over the next few days. The version of the latest update is 1.0.154.36.

      Note to Dev channel users: The Dev channel release will stay at 0.4.154.33. The current stable release is the same as the current Dev channel release without the Hotmail fix (which hasn't been tested enough to release to all users). An update is coming next week.

      原始链接

    • 家园 Chrome Dev channel release:

      Dev channel release: 0.3.154

      发行速度挺快的,看样子10个月内正式版1.0有希望推出。

    • 家园 癫狂一下,Chrome与Gecko。

      有没有好事者将Gecko集成到Chrome架构中,使Chrome具有双渲染引擎;更有甚者,集成IE 7的MSHTML.DLL到Chrome中。

    • 家园 Web browser 与 Layout engine

      [1] Web Browser

      Google最新推出的产品Chrome是一个互联网浏览器(Web Browser)。目前市场上流行的浏览器,主要是微软的Internet Explorer(IE),Mozilla的Firefox,挪威人的Opera,还有Apple的Safari。

      各家浏览器的市场份额,说法不一。截止2008年8月份,有的机构的统计数字说,IE的市场份额是78.30%,Firefox占16.36%, Safari占3.41%,Opera占0.81%。但是另外的机构说IE目前市场份额只有58.46%,而Firefox占31.40%。

      但是大家公认的事实是,IE目前仍然是浏览器市场的龙头老大,占绝对优势,虽然最近几年有下降趋势。Firefox上升势头明显,Safari也在吸引更多用户。

      Google的Chrome,会不会颠覆目前浏览器市场的格局,大家拭目以待。

      [2] Web Browser的组成部分

      Web Browser的工作,从概念上讲,分这么几件任务。

      1. 用户输入一个网址(URL),Browser根据这个URL,与相应的网站(Web Site)建立HTTP或者HTTPS联系。

      2. Browser下载相应网页(Web Page)。网页的数据大体上包括这么几个部分,a. HTML格式的内容,b. JavaScript的操作代码,c. 插件(Plugin)内容,譬如视频等等。

      3. Browser把HTML格式的内容绘制出来,包括,a. HTML的布局,譬如左边是什么,顶部是什么,中间是什么。b. 根据用户设定,呈现文字,譬如字体是宋体还是楷书,大小尺寸,重体斜体等等。c. 显示不同格式的图片,譬如JPG,GIF,PNG等等。

      4. Browser相应用户操作,尤其是处理由JavaScript程序控制的动作。譬如用户在浏览器界面上移动鼠标,有些图标会放大或缩小,颜色会变化等等。

      5. 支持插件。插件是浏览器本身不自带的程序,譬如PDF文件阅读器,视频显示器等等。

      第一步和第二步的工作咋一看来并不难,但是想提高速度,却并不是那么简单。通常的办法是多线程并发处理。Google Chrome比其它浏览器明显更快,据说是用了Edge push的技术。这个技术的细节,有待我们打开Chrome的源代码,仔细研究。

      第三步和第四步的工作,由布局引擎(Layout engine)来完成。Layout engine又被称为绘制引擎(Rendering engine)。开发Layout engine的工作量大,难度也高,所以有时候软件工程师把Layout engine和浏览器混为一谈,这样的说法固然不准确,但是也从侧面说明了Layout engine在整个Web Browser系统中的地位。

      [3] Layout engine

      微软的IE,背后的Layout engine名曰三叉戟(Trident)。Firefox身后的Layout engine,叫Gecko。而Apple的Safari,以及Google的Chrome,用的Layout engine都是WebKit。

      虽然IE占据的大部分市场份额,但是似乎谈论Trident的文章不是很多。Gecko的特点是小,有点像OS的微内核一样,扩展性很好。

      最近几年,谈论WebKit的文章很多,估计与以下几个因素有关。

      1. WebKit的前身是由开源的Linux项目组KDE设计开发的KHTML,后来Apple觉得这个产品不仅开源,而且架构设计简洁高效,所以就参与开发。再后来,在产品未来开发计划上,Apple与KDE产生分歧,于是各干各的,Apple把产品名字改为WebKit。

      2. 基于WebKit,Apple公司于2003年推出MacOS平台的浏览器,Safari。

      3. 2005年,WebKit源代码向公众开放。

      4. 同年,Nokia推出S60平台的手机浏览器,其内部Layout engine,也是WebKit。

      5. 同年,KDE宣布放弃KHTML,改用WebKit。

      6. 2007年,Apple推出手机iPhone,引起轰动。iPhone自带的手机浏览器,也使用了WebKit。iPhone的浏览器,缩放自如,引人注目。

      7. 2008年,Google推出浏览器Chrome,其内部Layout engine,也是WebKit。

      [4] 嵌入式Layout engine

      需要指出的是,作为一个Layout engine,WebKit的用途,并不限于浏览器,而是可以作为一个通用的UI界面平台。譬如,微软的电子邮件软件Outlook,虽然不是浏览器,但是其界面控制,是基于Layout engine。微软的Office软件,也是基于Layout engine。作为微软产品系列的子产品,它们无一例外地用了微软的Layout engine,Trident。

      联想到我们目前开发手机软件,大多数直接调用手机OS的API,来绘制UI界面。每次手机软件有新版本推出,哪怕仅仅是把一个button,从手机屏幕的左边,挪到右边,都要修改软件源代码。修改完源代码后,都必须送运行商重新审定,测试。运行商审批通过后,还要让手机用户下载,重装。不仅周期长,而且给软件开发商,移动运行商,手机用户,三家都带来很大麻烦。

      试想一想,如果我们在每个手机预装了Layout engine,今后每当手机应用软件开发商更新手机应用软件,不需要移动运行商审批检测,不需要手机用户下载重装。只需要向手机用户推送类似于HTML+JavaScript的内容数据即可。

      换句话说,把内容本身与绘制内容的Layout engine分离,将极大降低手机应用软件的开发难度,极大缩短它们的更新周期。到那时,手机应用说不定就会极大繁荣。

      当然也存在缺陷。如果手机应用软件开发商,更新其产品时,不需要预先送交移动运行商审批。站在运行商立场,如何保证应用开发商的新产品,从内容到质量符合运行商要求?如何保障运行商的利益不受侵蚀?

      关键词(Tags): #Browser#Google#Webkit
    • 家园 先读文档,再读代码,然后再读文档......

      杜先人教导我们:读书破万卷,下笔如有神。华教授说:读书先由薄到厚,然后由厚到薄。

      先前说Chrome的文档读了个7788,实在是孟浪的很。而后开始读代码,读的文档又忘到爪哇国里去了,简直就是在读“浆糊书”。然而再读文档,思路又开始清晰了。希望自己的帖子不要是“浆糊书”,可事情那里是这样的简单。要不,咱也去喝口水?

      Chrome的提纲内容已经从7个变成了9个。怎么下笔?

      俺准备在本线中保留提纲内容的“普及版”,另外再开9条线对应提纲的9项内容,更加详细地讨论其中的代码。

      各位河友,土鳖抗铁牛。

    • 家园 Chrome和Firefox,题外话

      昨天把Mozilla的Firefox包也挡了下来,不为别的,就是做个在两个浏览器的代码结构和开发上做个小小的横向比较。比起Chrome来,FireFox整个小了一圈(400MB vs 30MB,也许还有其它的包,这只是俺目前的初步印象)。

      从相关设计文档上Firefox比Chrome就差的不是一点点。GOOGLE到底是有米,比Mozilla这个松散组织做的好很多。

      Firefox的“进入门槛”比Chrome可是高多了。俺的个人习惯是拿到一个产品从来不看说明书,先摆弄摆弄,遇见问题再翻说明书。Chrome的包展开后俺初看一下目录结构就开始用VS打开Solution文件开始Build.FireFox?俺现在连门朝什么地方开都不知道。那几个Bat 文件到可能是开门的钥匙。

      不管如何,VS 和 C++ Builder是Windows上两个最主要的C++开发工具,Mozilla只要提供一个工具的开发文件(sln/vcproj或者grp/prj)就能够大大降低其入门门槛。可惜,没有?!

      如果能在一个IDE环境中轻松编译,链接,调试一个软件产品。学习,分析这个产品就不是个难事情。代码就是最好的文档,DEBUG就是最好的老师。看不懂源码没有关系,设个断点,看看调用栈就齐了。

      一个(软件)产品的普及推广过程中,第3方开发的介入是一个非常重要的因素。对程序员而言,最兴奋的莫过于自己编写(改动)的代码立即展现出效果。从这点上讲,俺看好Chorme而不是Firefox.

      Chrome源码链接

      • 家园 想找sln就看看gluezilla或者mono下的东西

        那里面有。NET1.1的sln

      • 家园 Mozilla/Firefox 不是纯编译的

        FireFox 主要的外观行为都是通过 XUL+XBL+JavaScript 来完成的,这些都给予一个基本的Gecko渲染引擎。 从某种程度上说, Firefox浏览器扩展其实和浏览器的界面本身没有本质的区别,这也是为什么firefox是目前扩展性最好的浏览器。

        Chrome 没有看过代码,所以不敢妄加断言,但是最起码IE的方式就和firefox不同,所有的组件都是COM,当然都是通过C++来完成的。

        对于 Firefox 而言,目前还没有一个ide能够同时搞定 C++/IDL/JavaScript/XUL/XBL/DTD/CSS, 在这种情况下,即便给你一个 .SLN 也没有多少实际上的意义~~~

        • 家园 嗯,XUL这个东西跟微软的XAML有的一拼

          都是用标记来规划界面的。Gecko的引擎好像是gtk还是什么的。以前河里有人说,mac在win下的软件就是运行在gtk还是什么的下的。

分页树展主题 · 全看首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河