主题:【原创】Chrome程序初探(序) -- 素里太守
[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分离,将极大降低手机应用软件的开发难度,极大缩短它们的更新周期。到那时,手机应用说不定就会极大繁荣。
当然也存在缺陷。如果手机应用软件开发商,更新其产品时,不需要预先送交移动运行商审批。站在运行商立场,如何保证应用开发商的新产品,从内容到质量符合运行商要求?如何保障运行商的利益不受侵蚀?
- 相关回复 上下关系8
🙂小鬼子有个lunascape,能在三个引擎间切来切去 旮旯瓢子 字79 2008-09-19 16:50:45
🙂那个东西装了一个,跑之。 1 素里太守 字176 2008-09-20 00:20:37
🙂被ff的人先集成也也有可能 熊仔 字10 2008-09-19 10:48:03
🙂Web browser 与 Layout engine
🙂Informative. Flowered. mpc8240 字0 2008-09-21 17:37:44
🙂很好的背景介绍,花之 素里太守 字0 2008-09-16 11:08:36
🙂先读文档,再读代码,然后再读文档...... 1 素里太守 字487 2008-09-15 23:33:22
🙂Chrome和Firefox,题外话 6 素里太守 字1164 2008-09-13 16:14:02