浏览器内核-渲染引擎、js引擎

Confluence安装Drawio插件 记录confluence安装drawio插件步骤 阅读详情

一个完整的浏览器包含浏览器内核和浏览器的外壳(shell)。浏览器核心——内核分成两部分:渲染引擎和js引擎。由于js引擎越来越独立,内核就倾向于只指渲染引擎。

1 浏览器组成结构

浏览器一般由七个模块组成,User Interface(用户界面)、Browser engine(浏览器引擎)、Rendering engine(渲染引擎)、Networking(网络)、JavaScript Interpreter(js解释器)、UI Backend(UI 后端)、Date Persistence(数据持久化存储) 如下图:
浏览器组成结构

  • 用户界面 -包括地址栏、后退/前进按钮、书签目录等,也就是你-所看到的除了页面显示窗口之外的其他部分
  • 浏览器引擎 -可以在用户界面和渲染引擎之间传送指令或在客户端本地缓存中读写数据等,是浏览器中各个部分之间相互通信的核心
  • 渲染引擎 -解析DOM文档和CSS规则并将内容排版到浏览器中显示有样式的界面,也有人称之为排版引擎,我们常说的浏览器内核主要指的就是渲染引擎
  • 网络 -用来完成网络调用或资源下载的模块
  • UI 后端 -用来绘制基本的浏览器窗口内控件,如输入框、按钮、单选按钮等,根据浏览器不同绘制的视觉效果也不同,但功能都是一样的。
  • JS解释器 -用来解释执行JS脚本的模块,如 V8 引擎、JavaScriptCore
  • 数据存储 -浏览器在硬盘中保存 cookie、localStorage等各种数据,可通过浏览器引擎提供的API进行调用
2 渲染引擎

维基百科上是这样介绍浏览器内核的,网页浏览器的排版引擎(Layout Engine或Rendering Engine)也被称为浏览器内核、页面渲染引擎、解释引擎或模板引擎,它负责取得网页的内容(HTML、XML、图像等等)、整理消息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要根据表示性的标记语言(Presentational markup)来显示内容的应用程序都需要排版引擎

3 javascript引擎

JS引擎负责解析Javascript语言,执行javascript语言来实现网页的动态效果。

4 主流浏览器内核

各浏览器渲染引擎构成

浏览器渲染引擎-JS引擎
IETridentChakra
FirefoxGeckoSpiderMonkey
ChromeWebkitWebcoreV8
SafriWebkitWebcorejavascriptcore
OperaPrestoCarakan
1. 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版本IE版本更新
unversioned4首发版本
unversioned5增加对CSS支持及改变对CSS2的渲染
unversioned5.5修正部分CSS排版控制
unversioned6修正box model的错误及新增quirks model的切换功能…
unversioned7修正部分CSS错误以及增加对PNGalpha通道(半透明)的支持
4.08第一个通过Acid2测试的版本
5.09支持HTML5、SVG、CSS3及更换javascript引擎。另外,加入硬件加速改善性能

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

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


2. Safari

afari是苹果公司开发的浏览器,使用了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的浏览器引擎。

3. Chrom/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框架,也提升了安全性。

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


4.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作为浏览器核心引擎

Linear A:用于Opera 4.0~6.1版本。
Linear B:用于Opera 7.0~9.2版本。
Futhark:用于Opera 9.5~10.2版本。
Carakan:由Opera软件公司编写,自Opera10.50版本开始使用。


4.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的雇员和义工所维护和发展。

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以上版本。

其他JS引擎

KJS:KDE的ECMAScript/JavaScript引擎,最初由Harri Porten开发,用于KDE项目的Konqueror网页浏览器中。
Narcissus:开放源代码,由Brendan Eich编写(他也参与编写了第一个SpiderMonkey)。
Tamarin:由Adobe Labs编写,Flash Player 9所使用的引擎。
Nitro(原名SquirrelFish):为Safari 4编写。

参考
[1] 各主流浏览器内核介绍
[2] 关于浏览器内核你不得不了解的事
[3] 浏览器内核、渲染引擎、js引擎
[4] 浏览器渲染引擎「内核」

如果内容信息侵犯了您的合法权益,请告知我,我将及时处理。
博客内容仅作学习/交流/参考之用,欢迎大家交流探讨;E-Mail:dwang2014#hotmail.com(#@)
站在巨人的肩上才能看得更远,一步一个脚印才能走得更远。分享成长,交流进步,转载请注明出处!

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板 想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。 阅读详情

相关推荐

RK3568平台(KBuild篇)KBuild编译体系

从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。

weixin_49303682的博客 316

《十八》浏览器渲染引擎

渲染引擎用来解析 HTML 和 CSS,渲染网页。渲染引擎用来渲染页面,JS 引擎用来执行 JS

花铛 1494

【自适应调制】自适应调制解调通信链路误码率matlab仿真与分析

BPSK中的B是“Binary”的意思,也就是有两个变化状态,比如说相位上的“+90°(代表1)、-90°(代表0)”,一个状态代表的就是一个比特。QPSK的“Q”是“Quadrature”的意思,有四个变化状态,如相位上的“+45°(代表00)、-45°(代表11)、+135°(代表10)、-135°(代表01)”,那么一个状态就代表两个比特的信息,如图2所示。同理8PSK的一个状态代表三个比特。但是功率资源并不是无限的,基站总的发射功率是一定的,为了充分利用所有的功率,采用的就是AMC技术。

FPGA/MATLAB学习教程/源码/项目合作开发 1802

js引擎渲染引擎浏览器与node中的event loop

js引擎渲染引擎浏览器event loop、node的event loop

weixin_47198976的博客 1890

前端常见的浏览器及其内核,渲染引擎

WEB前端常见的浏览器,内核,以及渲染引擎

qq_65133995的博客 1498

浏览器js引擎渲染引擎

渲染引擎浏览器中用于解析和显示网页内容的核心组件。

weixin_46061399的博客 550

浏览器渲染过程以及浏览器内核JS引擎的关系

浏览器渲染过程以及浏览器内核JS引擎的关系

qq_40853132的博客 908

【前端】浅谈浏览器内核渲染引擎JS引擎

浏览器内核是什么? 简而言之,浏览器内核就是把我们编写的代码转换为页面的中控件。 虽然现在大家谈起浏览器内核时,多指代渲染引擎(Rendering engine 或 layout engineer)。但其实浏览器内核包括了两部分,渲染引擎JS引擎,只是后来JS引擎用的越来越多所以就单独的把JS引擎拿了出来。 渲染引擎 渲染引擎负责负责对网页语法的解释(如HTML、XML等)并渲染网页(CSS)。...

小鱼酱の前端之路( •̀ ω •́ )y 6853

浏览器内核渲染引擎js引擎

1.定义 浏览器内核又可以分成两部分:渲染引擎(layout engineer或者RenderingEngine)和JS引擎渲染引擎功能作用 渲染引擎,负责对网页语法的解释(如HTML、JavaScript)并渲染网页。所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不...

极客神殿 1016

浏览器内核渲染引擎JS引擎简介

一、定义 浏览器内核分成两部分:渲染引擎JS引擎。 由于JS引擎越来越独立,浏览器内核 就倾向于 单指 渲染引擎。    渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具。(说白了,就是按照HTML代码在界面上绘制各种控件图形) 二、常见引擎 渲染引擎:     firefox使用gecko引擎     IE使用Trident引擎     2015...

hello_world_csdn的博客 456

浏览器内核渲染引擎js引擎的关系

浏览器内核又可以分成两部分:渲染引擎(layout engineer或者RenderingEngine)和JS引擎渲染引擎功能作用 渲染引擎,负责对网页语法的解释(如HTML、JavaScript)并渲染网页。所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果...

zhengzhengwang的专栏 804

浏览器渲染引擎JS引擎简介

一、定义 浏览器内核分成两部分:渲染引擎JS引擎。 由于JS引擎越来越独立,浏览器内核 就倾向于 单指 渲染引擎渲染引擎是一种对解析HTML、CSS等进行解析并将其显示在页面上的工具。 二、常见引擎 渲染引擎:     firefox使用gecko引擎     IE使用Trident引擎     2015年微软推出自己新的浏览器,原名叫斯巴达,后改名edge,使用edge引擎     opera最早使用Presto引擎,后来弃用     chrome\safari\opera使用webkit引擎  

那就杰出的博客 1799

初步理解浏览器渲染原理

显然这样子的效率更高,毕竟这个是在非主线程上合成的,没有占用主线程资源,另外也避开了布局和绘制两个子阶段,所以相对于重排和重绘,合成能大大提升绘制效率。浏览器会将所有的回流、重绘的操作放在一个队列中,当队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会对队列进行批处理。外部样式如果长时间没有加载完毕,浏览器为了用户体验,会使用浏览器会默认样式,确保首次渲染的速度。还有一种情况:就是更改了一个既不要布局也不要绘制的属性,那么渲染引擎会跳过布局和绘制,直接执行后续的合成操作,这个过程就叫合成。

ZhangYu_010228的博客 2631

前端 js浏览器工作原理 和 v8引擎 01

嘿,老哥,来了就别跑!学完 ,不亏 😂。

m0_47186697的博客 1652

JavaScriptJavaScript 简介 ① ( 浏览器组成 - 渲染引擎 / JavaScript 引擎 | JavaScrip 示例 | JavaScrip 引擎工作过程分析 )

一、浏览器组成 - 渲染引擎 / JavaScript 引擎 1、浏览器组成 2、渲染引擎 3、JavaScript 引擎 二、JavaScrip 示例 1、代码示例 2、JavaScrip 引擎工作过程分析

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1864

浏览器底层的渲染引擎是干什么的 ?底层原理是什么?

浏览器底层的渲染引擎是负责解析HTML、CSS和JavaScript,并将它们转化为可视化的网页的程序。渲染引擎可以说是浏览器的核心组件之一,它将网页中的文本、图片、视频和其他内容以及交互性的元素组合在一起,呈现给用户。在布局和绘制阶段,渲染引擎将渲染树中的元素进行布局,并将它们绘制在屏幕上。渲染树是由DOM树和CSSOM树结合而成的,它是渲染引擎用于布局和渲染网页的基础。在用户与网页进行交互时,常见的会触发回流操作的操作包括改变窗口大小、改变元素的位置、大小、字体大小等。

长风破浪会有时的博客 618

浏览器渲染原理&&JavaScript V8引擎

V8引擎

qq_42582773的博客 851

前端基础(浏览器引擎/HTTP/目录/异步、延迟、承诺/文件API/事件/加载、渲染、绘制/编码、转码、转义/进程与线程/正则表达式)

浏览器内核又称渲染引擎

saoraozhe3hao的专栏 1207

labview将2张图片合成1张图片并显示在控件,labview导入图片控件,WINDOWS

labview he cheng two picture to one

Xtreme.Toolkit.Pro.v15.0.1安装包

Xtreme.Toolkit.Pro.v15.0.1 该库是基于MFC基础上开发的 比普通的MFC应用程序的界面舒服,效果特别好 有待学习的可以下载好来好好研究研究

上一篇: HTML属性与DOM属性的区别
下一篇: JavaScript事件机制
普通玩家
博客等级 码龄12年 9粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值