简析Chrome和Webkit的渊源
http://www.3lian.com/edu/2012/05-25/28803.html
互联网的浪潮从未停息,而用以网上冲浪的冲浪板也一直在变得愈加精良。自人们进入互联网时代以来,即已经发生了三次浏览器大战。第一次浏览器大战的主角是IE和Netscape,最终IE凭借着Windows的庞大身躯推倒了Netscape;第二次浏览器大战Netscape浴火重生化身为火狐狸Firefox,一口咬了IE身上一大块肥肉;正在Firefox和IE正缠绵不息之时,突然凭空杀出个Chrome——这名出身豪门Google的小伙子一下子成长得额外精壮,上串势头凶猛,追得两位前辈娇喘吁吁。

Chrome正在猛击两位前辈
这位Chrome究竟是何方人物,能练就如此神功,在短短几年内就成为互联网浏览的一大主流,市场份额赶超了Firefox不说,甚至还曾在短时间内压过了微软帝国的IE,形成天下三分的第三次浏览器大战的格局?

Chrome已在市场份额上击败了Firefox
Chrome的血统
出于好奇,不少人都八卦了一下Chrome的来历,然后发现Chrome的背后深藏着Webkit这个名字。对浏览器有所研究的朋友,应该也会或多或少地闻过Webkit的大名。Webkit源于KDE开源项目,兴盛于苹果公司的Safari项目,它身上有诸多创新,近年来风行的HTML5以及CSS3潮流都和Webkit脱不开关系。Webkit小巧、灵活但又十分强大,而且源代码开放,深得业界喜爱。从诺基亚S60上的浏览器,到价比肾贵的iPhone上的Safari,我们都能看到Webkit的身影。

Webkit(左)和Safari的logo,一看就孽缘深
Google从来都不是嗅觉迟钝的公司,Webkit的优秀自然也吸引了这位互联网枭雄的眼光。2008年9月,Google发布了Chrome的测试版,Chrome面世了。Chrome使用了Webkit的代码,继承了Webkit的优良排版引擎,渲染页面速度惊人。

Chrome首个测试版
既然Chrome使用了Webkit的源代码,也使用了Webkit的排版引擎,那么我们是否就可以认为,Google只是在Webkit上面加了一层壳就做出了Chrome呢?
Chrome的基因突变
Chrome是Webkit的马甲,这种说法并不准确。实际上Webkit由两部分组成,一部分是WebCore排版引擎,用以解析HTML语言和 CSS框架;另一部分为JSCore JavaScript执行引擎,用以执行网页JS脚本。Chrome只是继承了Webkit的WebCore部分,在JS引擎上使用了Google引以为豪的“V8”引擎,大大地提高了脚本执行速度,这也是为什么Chrome会如此快的重要原因。

Webkit包括WebCore和JSCore
不仅如此,Chrome还在Webkit上封装了一层Webkit Glue,Chrome中只调用Webkit Glue层的接口使用Webkit组件。与此同时,Chrome的源代码和Webkit也有了很大区别,Google对Webkit的源代码重新进行了梳理,使代码的可读性更好,编译效率更高,并拥有自己的开源项目——Chromium。
Chromium和Chrome:试制品和成品
既然提到了Chromium,这里就顺带谈一下Chromium和Chrome的区别。不知道从什么时候开始,流行着这样一种说法——Chrome开源。这是错误的。Chrome并非一款自由软件,也没有开放源代码。甚至和Firefox比起来,Chrome还很封闭——因为它无法提供像Firefox一样繁多而高权限的应用接口,这使得Chrome在扩展以及界面定制方面都不如Firefox自由。那Chrome是开源软件一说何来之有?

Firefox十分开放
之所以这种说法,多是因为人们把Chrome和Chromium搞混了。虽然名字很像,图标界面功能什么的都差不多,也同样隶属于Google,但事实上这两者真的不同。Chromium是一款自由软件,遵循BSD许可证开源,开发者可以使用Chromium的源代码进行开发。我们可以认为 Chromium是Google为了发展Chrome而开启的开源计划,Chromium相当于Chrome的实验开源版。两者功能也有微妙的差异,Chrome比Chromium多了PDF阅读器、Flash Player及Google Update等一些小部件。

Chromium(左)和Chrome
简单来说,Chromium是一个实验项目,Chrome则是一件商品。开发者所能使用的代码只能是开源的Chromium,而不会是闭源的 Chrome。若听到有人说,某某浏览器基于Chrome内核,速度快得很!这时候我们应该知道,这款浏览器实际上使用的是Chromium内核。
广受欢迎的Chromium
目前使用Chromium内核的著名国产浏览器有360极速浏览器、搜狗浏览器、世界之窗浏览器极速版等等,为数不少。但我们发现,在国内虽然Chromium内核很受浏览器厂商欢迎,但是更原始的Webkit却几近无人问津。这又是为何?

人们更热衷于Chromium
当然这也是有原因的。前面提到,Google对Webkit的代码重新梳理,Chromium代码的可读性和编译效率远比Webkit高。对比 Chromium的代码,Webkit的代码堪比天书,开发难度高得多。Webkit这货不是你想弄,想弄就能弄的啊。更何况Chromium的V8 JS引擎比Webkit的JSCore效率更高,好用又强大的东西干嘛不用呢。
鉴于Chromium和Webkit拥有较大的区别,我们不应该单纯地认为Chrome/Chromium只是在Webkit上面套一个马甲。给Google的工程师们一些掌声吧,因为他们的优秀和努力,世界上多了一个优异的浏览器内核。
简析Chrome和Webkit的渊源的更多相关文章
- Chrome 和 Webkit 的渊源
互联网的浪潮从未停息,而用以网上冲浪的冲浪板也一直在变得愈加精良.自人们进入互联网时代以来,即已经发生了三次浏览器大战.第一次浏览器大战的主角是IE和Netscape,最终IE凭借着Windows的庞 ...
- Linux VFS机制简析(一)
Linux VFS机制简析(一) 本文主要基于Linux内核文档,简单分析Linux VFS机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文 ...
- 简析hotjar录屏功能实现原理
简析hotjar录屏功能实现原理 众所周知,hotjar中录屏功能是其重要的一个卖点,看着很牛X酷炫的样子,今天就简单的分析一下其可能实现(这里只根据其请求加上个人理解分析,并不代表hotjar中真实 ...
- 简析.NET Core 以及与 .NET Framework的关系
简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
- RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- PHP的错误报错级别设置原理简析
原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...
- Android 启动过程简析
首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...
随机推荐
- guava快速入门(二)
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] ...
- 文件夹操作之判断是否存在(Directory)
Directory类用于操作文件夹,用于创建.移动和枚举目录和子目录的静态方法.DirectoryInfo类用于典型操作,如复制,移动,重命名,创建和删除目录.他们都可用于获取和设置相关属性或有关创建 ...
- Win7系统下网站发布IIS配置
*本帖为个人收集贴,所有版权归:西门的后花园 http://ons.me* Technorati 标记: IIS,网站,发布,配置 一.首先是安装IIS.打开控制面板,找到“程序与功能”,点进去 二. ...
- Java集合 之Map(HashMap、Hashtable 、TreeMap、WeakHashMap )理解(new)
HashMap 说明: 在详细介绍HashMap的代码之前,我们需要了解:HashMap就是一个散列表,它是通过“拉链法”解决哈希冲突的.还需要再补充说明的一点是影响HashMap性能的有两个参数:初 ...
- python_tensorflow_Django实现逻辑回归
1.工程概要 2.data文件以及input_data文件准备 链接:https://pan.baidu.com/s/1EBNyNurBXWeJVyhNeVnmnA 提取码:4nnl 3.logiss ...
- git杂记-分支简介
分支创建 //只创建分支不切换: $ git branch testing //创建并切换分支$ git checkout -b iss53 查看各个分支的指向对象 $ git log --oneli ...
- Typescript中一些不理解的概念解释(泛型、断言、解构、枚举)
新的项目想使用typescript,因此又对其概念及使用过一遍,本文主要记录下对之前一些概念不太理解的地方. 1.泛型 定义: 在定义函数.接口或者类的时候,不预先指定具体的类型,而是在使用的时候再指 ...
- C# 按部门拆分excel文件
按照所属部门不同将excel文件拆分成多个文件 string excel_path = @"G:\zhyue\backup\2018-08-01 读取腾讯邮箱接口-获取一个月内未接收到外部邮 ...
- INNODB与MyISAM两种表存储引擎区别
mysql数据库分类为INNODB为MyISAM两种表存储引擎了,两种各有优化在不同类型网站可能选择不同,下面小编为各位介绍mysql更改表引擎INNODB为MyISAM技巧. 常见的mysql表引擎 ...
- C#默认OrderBy()函数的排序问题
昨天在客户现场遇到一个很奇葩的问题,猜下下面代码的排序输出是什么: static void Main() { List<", "1:"}; foreach(stri ...