浏览器内核-Webkit
关键字:浏览器内核,浏览器引擎,Browser,Webkit,Blink,Chromium。
本文简单介绍一下各种浏览器内核。着种介绍一下Webkit。顾名思义,浏览器内核就是浏览器的核心部分,也可以说是浏览器所采用的渲染引擎,负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染(显示)网页。常见的浏览器内核有:Trident,Gecko,Presto,Webkit等。对于开发者来说,有了浏览器内核,你就可以开发一款你自己的浏览器。或者在你的应用中嵌入浏览器内核,你就可以在你的应用中显示网页并运行JaveScript。
Trident
Gecko
Presto
Webkit
Webkit亦使用于Apple iOS、BlackBerry Tablet OS、Tizen及Amazon Kindle的默认浏览器。WebKit的C++应用程序接口提供了一系列的Class以在视窗上显示网页内容,并且实现了一些浏览器的特色,如用户链接点击、管理前后页面列表及近期历史页面等等。
WebKit的HTML及JavaScript代码源自KDE的KHTML及KJS库的一个分支,现已由KDE、Apple、Google、Nokia、Bitstream、BlackBerry及Igalia等独立开发。OS X、Windows、GNU/Linux以及其他类Unix系统操作系统,皆支持这个项目。2013年4月3日,Google宣布它创建了WebKit中WebCore组件的分支——Blink,Blink将用于新版Google Chrome与Opera。
WebKit的WebCore及JavaScriptCore组件使用GNU宽通用公共许可证,其他组件则采用BSD许可证。
截至2013年3月7日,Webkit商标已被苹果公司在美国专利及商标局注册为其商标。
缘起
WebKit的代码源自1998年所开发的KDE的HTML排版引擎KHTML及KDE的JavaScript引擎KJS的代码。Apple的Don Melton于2001年6月25日开始了WebKit这个项目,当时WebKit仅为KHTML及KJS的复刻,Melton在电子邮件中向KDE开发者解释,KHTML及KJS比起其他技术有着更容易开发、更轻巧(少于140000行程序码)、更加干净的设计,以及更与标准兼容的优势,KHTML及KJS将会通过连接器库(adapter library)的帮忙被移植到OS X,并重命名为WebCore及JavaScriptCore。JavaScriptCore在2002年6月,于KDE的邮件列表(mailing list)中首度发表,包含着苹果电脑首次发布的部分。WebCore在2003年1月,首度发布于Macworld Expo中由苹果电脑CEO Steve Jobs发表的Safari浏览器。当WebCore首次使用在第一个Safari的测试版本的同时,JavaScriptCore首次并以私有framework的方式包进Mac OS X v10.2,苹果电脑将其使用在Sherlock软件。Mac OS X v10.3是第一个Apple发布内置WebKit的操作系统,尽管它已经被内置在10.2内了。
Apple表示,有些牵涉到OSX的特定功能(例如:Objective-C、KWQ及OS X特定函数)将会在KDE的KHTML中缺席,这行为被称为不同的发展策略。
开发分裂
由于这两个分支(KHTML及WebCore)有着不同的目的而进行开发,所以他们代码互相补丁(patch)的难度越来越高。 KHTML的开发者认为,他们不喜欢接受苹果电脑对于KHTML的改变,并宣称两个组织的关系有些不好(a bitter failure,苹果提交他们相当大的补丁,其中包含相当大数目的改变,但是却缺少相关文件,并且经常包含着未来的扩充,然而这些补丁对于KDE的开发者而言,要集成回KHTML是相当困难的,此外,苹果电脑要求开发者阅览Apple的代码之前必须签署保密条款(non-disclosure agreements),甚至还不能访问苹果电脑的臭虫数据库[来源请求]。
在公布离婚的期间,KDE开发者Kurt Pfeifle(pipitas)贴出了一篇文章,宣称KHTML开发者已经设法从WebCore移植许多(但非全部)Safari所改进的项目回KHTML,而他们一直都希望这些改进是来自于苹果电脑。这篇文章让Apple开始联系KHTML的开发者,并讨论有关增进彼起关系的方法及未来的合作模式,事实上KDE项目确实有能力合并一些项目,来改进KHTML的渲染速度以及加入一些新的功能特色,包含Acid2渲染测试的改进。
自从新闻播报了fork事件之后,Apple在CVS发布了他们自己维护的WebKit版本,在他们发布代码后,Apple及KHTML开发者已经加深了合作关系,许多KHTML的开发者也成为了WebKitSVN代码库的审查(Reviewer)及提交者(Submitter)。
WebKit工作团队同时也逆转许多Webkit代码当中,专为苹果特定的修正,并且实现了一个平台特定的抽象层,可使渲染的代码于其他平台可以更顺利的运作。
在2007年7月,Ars Technica网站发布一篇文章,指出KDE开发团队将从KHTML转移到WebKit,再经由多年的集成,KDE开发平台4.5于2010年8月发布,它同时支持WebKit及KHTML,而KHTML的开发仍在继续。
分支
在2013年4月3日,Google宣布他将自行开发WebCore的分支,也就是Blink引擎。Chrome的开发者由于希望在浏览器的开发上拥有更大的自由度,同时避免与上游冲突,更可通过移除Chrome没有使用的组件而简化自己的程序库,所以决定开发WebKit的分支版本。同时Opera软件在同年稍早也宣布,他们将自有引擎转换到Chromium的程序库,在此时也同时转换到Blink的分支。根据这份声明,WebKit的开发者开始讨论移除Chrome相关代码的可能性,以精简整个WebKit程序库。
组件
WebCore
WebCore是一个由WebKit项目所开发的布局(Layout)、渲染(Rendering)及HTML和SVG的DOM库,完整的代码皆由GNU宽通用公共许可证所授权,WebKit框架包装了WebCore及JavaScriptCore,并提供一个Objective-C应用程序接口来接介由C++所开发的WebCore渲染引擎及JavaScriptCore脚本引擎,通过Cocoa API就可以在应用程序中很简单的使用这些组件。之后的版本同时包含了一个跨平台的C++抽象平台,并且提供各种API使用。
WebKit通过Acid2及Acid3的测试,包含完美像素的渲染(pixel-perfect rendering)以及没有任何时间及不顺的问题。
JavaScriptCore
JavaScriptCore是一个在WebKit中提供JavaScript引擎的框架,而且在OS X作为其他内容的脚本引擎。JavaScriptCore最初是为KDE的JavaScript引擎(KJS)库及PCRE正则表达式库,JavaScriptCore从KJS及PCRE复刻之后,已比原先进步了许多,有了新的特色以及极大的性能改进。
在2008年6月2日,WebKit项目宣布,将被重写为"SquirrelFish",它是一个字节码解释器,这个项目演变成SquirreFish Extreme(简称为SFX,市场称之为Nitro),首次公开于2008年9月18日,它会将Javascript编译为本地的机器语言,不再需要字节码解释器,同时加速了JavaScript的运行效率。
Drosera
Drosera是一个JavaScript调试工具,它被包含在每日编译的WebKit版本内。它被命名为茅膏菜属,这是一种食虫植物。Drosera目前已经被Web Inspector替换了。
V8 (JavaScript引擎)
V8是一个由美国Google开发的开源JavaScript引擎,用于Google Chrome中。
V8在运行之前将JavaScript编译成了机器码,而非字节码或是解释执行它,以此提升性能。更进一步,使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序与V8引擎的速度媲美二进制编译。
传统的Javascript是动态语言,又可称之为Prototype-based Language,JavaScript继承方法是使用prototype,通过指定prototype属性,便可以指定要继承的目标。属性可以在运行时添加到或从对象中删除,引擎会为运行中的对象创建一个属性字典,新的属性都要通过字典查找属性在内存中的位置。V8为object新增属性的时候,就以上次的hidden class为父类别,创建新属性的hidden class的子类别,如此一来属性访问不再需要动态字典查找了。
为了缩短由垃圾收集造成的停顿,V8使用stop-the-world, generational, accurate的垃圾收集器。在执行回收之时会暂时中断程序的执行,而且只处理对象堆栈。还会收集内存内所有对象的指针,可以避免内存溢出的情况。V8汇编器是基于Strongtalk汇编器。
参考链接:
https://zh.wikipedia.org/wiki/WebKit
https://zh.wikipedia.org/wiki/V8_(JavaScript%E5%BC%95%E6%93%8E)
浏览器内核-Webkit的更多相关文章
- css3中-moz、-ms、-webkit,-o分别代表的意思,以及微信浏览器内核分析
这种方式在业界上统称:识别码.前缀 //-ms代表[ie]内核识别码 //-moz代表火狐[firefox]内核识别码 //-webkit代表谷歌[chrome]/苹果[safari]内核识别码 // ...
- 浏览器内核Trident/Gecko/WebKit/Presto
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎, 渲染 ...
- 了解常见的浏览器内核 Trident,Geckos,Presto,Webkit
了解常见的浏览器内核 Trident,Geckos,Presto,Webkit 内核只是一个通俗的说法,英文名称为"Layout engine",翻译过来就是"排版引擎& ...
- 浏览器内核 Trident Gecko Presto Webkit
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等 Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等 Prest ...
- webkit、cef、nwjs、electron、 miniblink浏览器内核优缺点
市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit.cef.nwjs.electron. 1.cef:优点是由于集成的chromium内核,所以对H5支持的很全,同时因为使用的人也多, ...
- 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引 ...
- 【repost】浏览器内核、渲染引擎、js引擎
[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...
- 浏览器内核控制Meta标签说明文档【转】
背景介绍 由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览.基于IE的内核用于兼容网银.旧版网站.以360的几款浏览器为例,我们优先通过Webkit内核渲 ...
- 几大主流浏览器内核(Rendering Engine)
"浏览器内核",英文为"Rendering Engine",也叫"渲染引擎",作用是帮助浏览器来渲染网页的内容,将页面内容和排版代码转换为用 ...
随机推荐
- C语言bool类型定义
在我们的C语言程序中,经常用到布尔类型,但是C标准并不支持布尔类型,但我们可以自己实现其类型,实现代码如下:typedef enum{ false = 0, ture = !false}bool;
- SSO 登录功能的实现
一.引言 自己早晚都会碰到的问题. 当需要到分离多站点多应用的时候,都是希望用户只要在一个站点登录,其它所有的应用站点都是已登录的状态. 查了下新浪与淘宝的登录的资料,自己实现了一个并做下记录. 二. ...
- FindBugs缺陷库
1.possible null pointer dereference 解释:某字段可能为空 修复:对应字段使用前判空 2.normal confidence 解释:私有成员变量没有初始化 修复:初始 ...
- 移植最新u-boot(裁剪和修改默认参数)之韦东山笔记
1.下载.建立source insight工程.编译.烧写.如果无运行分析原因 tar xjf u-boot-2012.04.01.tar.bz2 cd u-boot-2012.04.01 make ...
- .NET学习笔记(1)— C#学习路线图
目录 一:引言 二:.NET技术体系 三:常用工具汇总 四:学习资源汇总 五:书籍推荐 六:关于阅读技术书籍的经验 七:总结 一:引言 因为工作调整,从PHP开发零基础转型到.NET开发,前期没有 ...
- over Oracle
QL code: sql over的作用及用法RANK ( ) OVER ( [query_partition_clause] order_by_clause )DENSE_RANK ( ) OVER ...
- Android报错:The content of the adapter has changed...与Channel is unrecoverably broken and will be disposed的分析与解决办法
在Android中adapter错误: The content of the adapter has changed but ListView did not receive a notificati ...
- Linux命令(1):cd命令
1.作用:改变工作目录: 2.格式:cd [路径] 其中的路径为要改变的工作目录,可为相对路径或绝对路径 3.使用实例:[root@www uclinux]# cd /home/yourname/ ...
- .NET的JSNO 序列化跟反序列化
由于本人最近在写webservice,之前一直都同通过AJAX,在服务端处理业务,但是最近需要写一些接口给其他人用,需要使用jsno的序列化与反序列化,什么是jsno就不多说,jsno的好处也不多说, ...
- CAF(C++ actor framework)(序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)
这里应该是序列化的最后一篇.感觉自己写的不是很好,也一点点在学习.这次就不贴上代码了.代码在github上的announce5.cpp.代码简单,但是分析下去会有细思恐极的感觉! 先看一下几个函数是干 ...