所谓的“浏览器内核”无非指的是一个浏览器最核心的部分——“Rendering Engine”,直译这个词汇叫做“渲染引擎”,不过我们也常称其为“排版引擎”、“解释引擎”。这个引擎的作用是帮助浏览器来渲染网页的内容,将页面内 容和排版代码转换为用户所见的视图。

注:有时候我们所说的“浏览器内核”甚至“渲染引擎”,其实除了渲染引擎,也悄悄包含了javascript引擎,如WebKit,它由渲染引擎WebCore和javascript引擎JSCore组成。

常见的浏览器内核(或者说渲染引擎)有很多个,如Trident、Gecko、WebKit等等,不同的内核对网页编写语法的解释也有不同,进而导致同一 个页面在不同内核的浏览器下显示出来的效果也会有所出入,这也是前端工程师需要让作品兼容各种浏览器的原因。

我们常常喜欢把浏览器内核与某浏览器名称直接挂钩起来,如IE内核、Chrome内核,其实是不全面的说法。比如Opera在7.0版本到12.16版本 中采用的是独立研发的Presto引擎,但在后续跟随了Chrome的脚步加入了WebKit大本营,放弃了Presto;另外即使名称相同,但版本不同 的引擎也可能存在较大差别。比如IE6使用的是Trident早期版本,存在许多bug,性能也较低。而最新的IE11所使用的Trident7.0版本 已经可以支持WebGL(3D绘图标准)以及HTML5大部分标准。

下面按照各个主流浏览器,介绍下它们所使用的浏览器内核的历程。

Internet Explorer:

IE开发计划开始于1994年夏天,微软为抵抗当时主流的网景Netscape Navigator,要在Windows中开发适合自己的浏览器,但微软并没有时间从零开始。因此和Spyglass合作,于是IE从早期一款商业性的专 利网页浏览器Spyglass Mosaic派生出来,虽然Spyglass Mosaic与NCSA Mosaic(首款应用得最广泛的网页浏览器)甚为相似,但Spyglass Mosaic则相对地较不出名并使用了NCSA Mosaic少量的源代码。

1996年,微软通过给予季度费用和部分收入从Spyglass中取得了Spyglass Mosaic的源代码和授权。从而使IE逐渐成为微软专属软件。它采用的排版引擎(俗称内核)为Trident。每一次新的IE版本发布,也标志着 Trident内核版本号的提升。

下面是各Trident版本信息:

冷知识:除Trident之外,微软还有另一个网页浏览器排版引擎,称为Tasman,它是使用在「Internet Explorer for Mac」的排版引擎。相较于Trident,Tasman引擎对网页标准有较佳的支持,但微软自04年开始已经停止了Mac计算机版本的 Internet Explorer的开发。

Safari

Safari是苹果公司开发的 浏览器,使用了KDE(Linux桌面系统)的KHTML作为浏览器的运算核心,Safari所用浏览器内核的名称是大名鼎鼎的 WebKit。 Safari在2003年1月7日首度发行测试版,并成为Mac OS X v10.3与之后版本的默认浏览器,也成为苹果其它系列产品 的指定浏览器(也已支持Windows平台)。

如上述可知,WebKit前身是KDE小组的KHTML引擎,可以说WebKit是KHTML的一个开源的分支。当年苹果在比较了Gecko和KHTML后,选择了后者来做引擎开发,是因为KHTML拥有清晰的源码结构和极快的渲染速度。

需要了解的是,虽然我们称 WebKit为浏览器内核(或浏览器引擎),但不太适合直接称之为我们开头提到的Rendering Engine(渲染引擎),因为WebKit本身主 要是由两个引擎构成的,一个正是渲染引擎“WebCore”,另一个则是javascript解释引擎“JSCore”,它们均是从KDE的渲染引擎 KHTML及javascript解释引擎KJS衍生而来。

在2010年4月,苹果公司宣布了其浏览器引擎Webkit的最新项目 Webkit2。Webkit2的目标是实现独立进程与非阻断式API。

WebKit可以说是苹果公司给开源世界的一大贡献,基于此开源引擎,衍生了多个WebKit分支,如下面要介绍的Chrome的浏览器引擎。

Chrome / Chromium

谷歌Chrome/Chromium浏览器从08年创始至今一直使用苹果公司的WebKit作为浏览器内核原型,是WebKit的一个分支,我们可以称之为Chromium引擎(注意我们这里说的是Chromium引擎,而不是Chromium浏览器)。

这里顺便介绍下Chrome和 Chromium两个浏览器的区别——Chromium浏览器是谷歌为发展自家的浏览器Chrome而开启的计划,所以Chromium相当于 Chrome的工程版或称实验版(尽管Chrome自身也有β版阶段),新功能会率先在Chromium上实现,待验证后才会应用在Chrome上。 Chromium一天最多可以更新十几二十个版本,实验性的新特性都会现在这里放出,但是Chromium本身其实并不稳定;而Chrome总共有四个更 新分支:Canary、Dev、Beta、Stable,稳定性依次增强。

我们说回引擎。 Chromium引擎虽然是属于WebKit的分支,却把WebKit的代码梳理得可读性提高很多,所以以前可能需要一天进行编译的代码,现在只要两个小 时就能搞定。因此Chromium引擎和其它基于WebKit的引擎所渲染页面的效果也是有出入的。基于以上原因,有的地方会把Chromium引擎跟 WebKit区分开来,有的地方则直接把Chromium引擎归为WebKit(比如维基百科),其实都有其道理。

然而在13年发布的 Chrome 28.0.1469.0版本开始,Chrome放弃Chromium引擎转而使用最新的Blink引擎(基于WebKit2——苹果公司于 2010年推出的新的WebKit引擎),Blink对比上一代的引擎精简了代码、改善了DOM框架,也提升了安全性。

Opera

Opera浏览器,是一款挪威 Opera Software ASA公司制作的支持多页面标签式浏览的网络浏览器。是跨平台浏览器可以在Windows、Mac和Linux三个操作系 统平台上运行。Opera浏览器创始于1995年4月,到2014年3月4日,官方发布的个人电脑用的最新版本为Opera20。

Opera的一个里程碑作品是Opera7.0,因为它使用了Opera Software自主开发的Presto渲染引擎,取代了旧版Opera 4至6版本使用的Elektra排版引擎。

Presto加入了动态功能,例如网页或其部分可随着DOM及Script语法的事件而重新排版。Presto在推出后不断有更新版本推出,使不少错误得以修正,以及阅读Javascript效能得以最佳化,并成为当时速度最快的引擎。

然而为了减少研发成本,Opera在2013年2月宣布放弃Presto,转而跟随Chrome使用WebKit分支的Chromium引擎作为自家浏览器核心引擎。

在Chrome与2013年推出Blink引擎(也是基于WebKit的分支)之后,Opera也紧跟其脚步表示将转而使用Blink作为浏览器核心引擎。

Firefox

Mozilla Firefox是一个开源网页浏览器,原名是Firebird,2004年2月9日,Mozilla Firebird决定改称Mozilla Firefox。Firefox浏览器使用的是Gecko内核,其发展历程如下:

1997年,网景收购了DigitalStyle。当时,网景浏览器在各方面的表现已经比不上她的主要竞争对手Internet Explorer。网景开始研发下一代的排版引擎,并期望把新的排版引擎应用于下一版本的网景浏览器上。

1998年初,Mozilla 计划开始执行。这个新的排版引擎名为Raptor,以开发源码的方式发放于互联网上。后来,因为商标问题,Raptor改名为NGLayout(即 next generation layout之意)。而最后NGLayout就被网景重新命名为Gecko。

2003年7月15日时代华纳解散了网景公司,大部分开发者被解雇。Mozilla基金会亦在当天成立,继续推动着Gecko的发展。时至今天,Gecko仍继续由Mozilla的雇员和义工所维护和发展。

最后还是再谈谈 javascript引擎(后面统称JS引擎)这东西。我们上述的渲染引擎主要是负责HTML、CSS以及其他一些东西的渲染,而JS引擎则主要负责对 javascript的渲染,一个JS引擎的好坏决定了一个浏览器对脚本的加载和执行速度,也影响了其跑分。

下方列出各种主流浏览器各自的JS引擎,了解下即可:

Firefox:

SpiderMonkey:第一款JavaScript引擎,由Brendan Eich在Netscape Communications时编写,用于Mozilla Firefox 1.0~3.0版本。

Rhino:由Mozilla基金会管理,开放源代码,完全以Java编写。

TraceMonkey:基于实时编译的引擎,其中部份代码取自Tamarin引擎,用于Mozilla Firefox 3.5~3.6版本。

JaegerMonkey:德文Jäger原意为猎人,结合追踪和组合码技术大幅提高性能,部分技术借凿了V8、JavaScriptCore、WebKit:用于Mozilla Firefox 4.0以上版本。

IonMonkey:可以对JavaScript编译后的结果进行优化,用于Mozilla Firefox 18.0以上版本。

OdinMonkey:可以对asm.js进行优化,用于Mozilla Firefox 22.0以上版本。

Chrome:

V8:开源,由Google丹麦开发,是Google Chrome的一部分。

注:我们上面提到Chrome是基于 WebKit的分支,而WebKit又由渲染引擎“WebCore”和JS解释引擎“JSCore”组成,可能会让你搞不清V8和JSCore的关系。你 可以这样理解——WebKit是一块主板,JSCore是一块可拆卸的内存条,谷歌实际上认为Webkit中的JSCore不够好,才自己搞了一个 V8 JS引擎,这就是Chrome比Safari在某些JS测试中效率更高的原因。

IE:

Chakra:中文译名为查克拉,用于Internet Explorer 9的32位版本及IE10+。

Opera:

Linear A:用于Opera 4.0~6.1版本。

Linear B:用于Opera 7.0~9.2版本。

Futhark:用于Opera 9.5~10.2版本。

Carakan:由Opera软件公司编写,自Opera10.50版本开始使用。

其它:

KJS:KDE的ECMAScript/JavaScript引擎,最初由Harri Porten开发,用于KDE项目的Konqueror网页浏览器中。

Narcissus:开放源代码,由Brendan Eich编写(他也参与编写了第一个SpiderMonkey)。

Tamarin:由Adobe Labs编写,Flash Player 9所使用的引擎。

Nitro(原名SquirrelFish):为Safari 4编写。

转载于:https://www.cnblogs.com/PowellZhao/p/5766646.html

各主流浏览器内核介绍相关推荐

  1. 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)

    内核 首先得搞懂浏览器内核究竟指的是什么. 浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎.它负责取得网页的内容(HTML ...

  2. 主流浏览器内核有哪几种?

    1.背景介绍. 什么是浏览器的内核? 浏览器最重要或者说最核心的部分叫做"Rendering Engine",可大概译为"渲染引擎",不过我们一般习惯将之称为& ...

  3. [css] 写出主流浏览器内核私有属性的css前缀

    [css] 写出主流浏览器内核私有属性的css前缀 完善一下: Chrome:Blink内核 -webkit-Safari:WebKit内核 -webkit-Firefox :Gecko内核 -moz ...

  4. js引擎渲染php,主流浏览器内核及JS引擎

    给大家科普一下主流浏览器 学习web前端,浏览器和编辑器是我们的好朋友 所以有必要了解浏览器的一些小知识 比如:什么是主流浏览器 主流浏览器 主流浏览器是有一定市场份额且有自己独立研发内核的浏览器 也 ...

  5. 主流浏览器内核及JS引擎

    tip:有问题或者需要大厂内推的+我脉脉哦:丛培森 ٩( 'ω' )و 给大家科普一下主流浏览器 学习web前端,浏览器和编辑器是我们的好朋友 所以有必要了解浏览器的一些小知识 比如:什么是主流浏览器 ...

  6. 目前主流浏览器市场及浏览器内核介绍

    主流浏览器 以下的数据来源于国际知名的统计网站statcounter,数据的统计时间为2021年08月 – 2022年08月 主流电脑浏览器 全球 国内 主流手机浏览器 全球 国内 由此数据可看到,谷 ...

  7. JavaScript 五大主流浏览器内核及Js引擎介绍

    主流浏览器区别 1 五大主流浏览器 IE Firefox GoogleChrome Safari Opera 厂商 浏览器 内核 备注 Js引擎 兼容前缀 Google Chrome webkit & ...

  8. JavaScript学习笔记(O)——浏览器内核介绍

    术语解释 浏览器最重要或者说核心的部分是"Rendering Engine",可大概译为"解释引擎",不过我们一般习惯将之称为"浏览器内核" ...

  9. 常见的主流浏览器内核

    "浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...

最新文章

  1. Linux 进程及进程之间的通信机制——管道
  2. Blink Coordinate Spaces
  3. 模型在gpu上反而速度变慢了_Tensorflow1.13.1+CUDA10.0+CuDNN7.4在GPU上训练模型
  4. 概率分布的熵归一化(Entropy Normalization)
  5. c语言打砖块游戏代码,打砖块游戏的源代码(请多指教)
  6. 自动化 测试框架部署(python3+selenium2)
  7. 【LeetCode笔记】1. 两数之和(JAVA、哈希表)
  8. 03 Python爬虫之Requests网络爬取实战
  9. C# 代码创建mysql存储过程(使用mysqlScript)
  10. ones刻录软件怎么用
  11. SPSS课程学习思路及流程
  12. 为什么优秀的程序员bug很少?因为他们……
  13. 山西大学 计算机科学,李德玉 - 山西大学 - 计算机与信息技术学院
  14. 清理Win10系统C盘的脚本方法
  15. CSS深入理解之line-height
  16. 2022红帽RHCSA考题解析
  17. 图像处理:U-Net中的重叠-切片(Overlap-tile)
  18. 如何实现公共WiFi短信认证上网?
  19. JS、JNS、JP(JPE)、JNP(JPO)指令详解、从原理上解释
  20. ASP.NET验证控件祥解 (选择自 rko 的 Blog )

热门文章

  1. com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/p
  2. 开发插件:分享10个非常实用IDEA插件,值得看一看!
  3. 网络基础:分享几个路由器设置小技巧,总有用得到的一天!
  4. 阿里的26款大神级的Java开源项目
  5. 微软最强命令行工具 Windows Terminal,强势霸榜GitHub
  6. 一个串口接2个设备_重庆市有2个大观镇,一个乡村旅游发达,一个特产柚子
  7. 使命召唤ios_使命召唤的精巧UI:战地
  8. 从零开始学Node.js(八_删查)
  9. 《大话数据结构》读后总结(九)
  10. 【SpringBoot】在IOC之外的类中使用IOC内部的Bean