一、 浏览器内核【Rendering Engin】 (排版引擎/渲染引擎/解释引擎)

  • 概述what?
    负责对网页语法的解释并渲染网页,将网页的代码转换为终于可见的页面形式,而且决定浏览器怎样显示网页的内容以及页面的格式信息。

    不同浏览器内核对网页编写语法的解释也有不同,故同一网页在不同内核浏览器中渲染效果也不尽同样,这就须要网页编写者在不同内核浏览器中測试网页显示的效果。

  • 为什么会排版错位呢?
    因为浏览器内核负责渲染网页内容的,进行排版。因此必定会出现排版错位等问题。

    造成此现象的原因有:站点本身编写不规范、浏览器本身的渲染不标准等等。

  • 内核分类
    1. Trident 内核(Windows)

    Trident(又称为MSHTML),于1997年,IE4中首次被採用,是微软在Mosaic(NCSA Mosai的简称,是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器,由伊利诺伊大学厄巴纳-香槟分校的NCSA组织于1993年发表。并于1997年1月7日正式终止开发和支持)代码的基础之上修改而来的,并沿用至IE11。通常被称为IE内核。

    因为IE本身的“垄断性”而使得Trident内核的长期一家独大,微软非常长时间都没有更新Trident内核,这导致了两个后果:
    1) Trident内核以前差点儿与W3C标准脱节(2005年)
    2) Trident内核的大量 Bug等安全性问题没有得到及时解决,然后加上一些致力于开源的开发人员和一些学者们公开自己觉得IE浏览器不安全的观点,也有非常多用户转向了其他浏览器。Firefox和Opera就是这个时候兴起的。非Trident内核浏览器的市场占有率大幅提高也致使很多网页开发人员開始注意网页标准和非IE浏览器的浏览效果问题。

    Trident内核不同版本号介绍

    Trident(又称为MSHTML),是微软开发的一种排版引擎。

    它的第一个版本号随着1997年10月Internet Explorer第四版的公布而公布。随后,Trident不断地被更新和完好:
    Trident II(IE5)——增进对CSS1.0的支持及对CSS2重大的变更
    Trident III(IE5.5)——修正部分CSS的排版控制
    Trident IV(IE6)——修正了一部分box-model的错误以及添加了“兼容模式(Quirks Mode)”切换功能,以添加对文件类型描写叙述(Document Type Definition。DTD)的支持
    Trident V(IE7)——修正很多CSS排版处理上的错误以及添加对PNG格式alpha通道(半透明)的支持

    IE从版本号11開始,初步支持WebGL技术。

    IE8的JavaScript引擎是Jscript。IE9開始用Chakra,这两个版本号区别非常大,Chakra不管是速度和标准化方面都非常出色。

    Trident内核的常见浏览器有:
    [1]IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0)。
    [2]360安全浏览器(1.0-5.0为Trident,6.0为Trident+Webkit,7.0为Trident+Blink);
    360极速浏览器(7.5之前为Trident+Webkit,7.5为Trident+Blink);
    [3]猎豹极轻浏览器、猎豹安全浏览器(1.0-4.2版本号为Trident+Webkit。4.3及以后版本号为Trident+Blink)、猎豹极轻浏览器;
    [4]傲游浏览器(傲游1.x、2.x为IE内核,3.x为IE与Webkit双核);
    [5]百度浏览器(早期版本号);
    [6]世界之窗浏览器(最初为IE内核。2013年採用Chrome+IE内核);
    [7]搜狗快速浏览器(1.x为Trident,2.0及以后版本号为Trident+Webkit)。
    [8]其他:
    2345浏览器、腾讯TT、淘宝浏览器、採编读浏览器、阿云浏览器(早期版本号)、瑞星安全浏览器、Slim Browser、 GreenBrowser、爱帆浏览器(12 之前版本号)、115浏览器、155浏览器、闪游浏览器、N氧化碳浏览器、糖果浏览器、彩虹浏览器、瑞影浏览器、勇者无疆浏览器、114浏览器、蚂蚁浏览器、飞腾浏览器、速达浏览器、佐罗浏览器、海豚浏览器(iPhone/iPad/Android)、UC浏览器(Blink内核+Trident内核)等。

    当中部分浏览器的新版本号是“双核”甚至是“多核”,当中一个内核是Trident,然后再添加一个其他内核。国内的厂商一般把其他内核叫做“快速浏览模式”,而Trident则是“兼容浏览模式”。用户能够来回切换。

    2.Gecko(跨平台)
    特点:代码全然公开,以C++编写的网页排版引擎。

     

    因此,其可开发程度非常高,全世界的程序猿都能够为其编写代码,添加功能。

    因为这是个开源内核,因此受到很多人的青睐,Gecko内核的浏览器也非常多,这也是Gecko内核尽管年轻但市场占有率能够迅速提高的重要原因。

    眼下为Mozilla家族网页浏览器以及Netscape 6以后版本号浏览器所使用。这软件原本是由网景通讯公司开发的,如今主要由Mozilla基金会进行维护,是开源的浏览器内核,这套排版引擎提供了一个丰富的程序界面以供因特网相关的应用程序使用,比如网页浏览器、HTML编辑器、client/server等等。

    尽管最初的主要对象是Mozilla的衍生产品,如Netscape和Mozilla Firefox(火狐内核),如今已有非常多其他软件如今利用这个排版引擎。

    Gecko也是一个跨平台内核。能够在Windows、BSD、Linux和Mac OS X中使用。

    常见的Gecko内核的浏览器:
    Mozilla Firefox、Mozilla SeaMonkey、Epiphany(早期版本号)、Flock(早期版本号)、K-Meleon.

    3.KHTML
    KHTML,是HTML网页排版引擎之中的一个,由KDE所开发。

     

    KDE系统自KDE2版起,在档案及网页浏览器使用了KHTML引擎。

    该引擎以C++编程语言所写,并以LGPL授权,支援大多数网页浏览标准。因为微软的Internet Explorer的占有率相当高,不少以FrontPage制作的网页均包括仅仅有IE才干读取的非标准语法。为了使KHTML引擎可呈现的网页达到最多,部分IE专属的语法也一并支援。

    KHTML拥有速度快捷的长处,但对错误语法的容忍度则比Mozilla产品所使用的Gecko引擎小。

    苹果电脑于2002年採纳了KHTML,作为开发Safari浏览器之用,并公布所修改的最新及过去版本号源码。

    后来发表了开放源码的WebCore及WebKit引擎。它们均是KHTML的衍生产品。在开发站点列出引擎改变内容,并会传回至KDE计划。

    因为两个衍生产品各走不同路线,使两者源码偏离。在与KDE交换更新会出现困难。当中一个原因,是苹果在对外公开源码之前,以一年时间编修他们的KHTML。另外,苹果传送更新至KDE计划的方式。多是一口气把大量修改一起传送,KDE在整理资料也出现一定的困难。及后苹果表示会以CVS格式来传送。再者,苹果所作出的修改包括Mac OS X系统独有的事物。如Objective-C、KWQ等,在Linux及KHTML是没有的。

    但KDE方面仍透过这些修改,为KHTML添加新功能及加快其排版速度。

    基于KHTML内核的内核:
    WebKit、WebCore。

     

    使用KHTML的产品

    • KDE Konqueror - KDE的网页浏览器及档案管理员
    • Safari - 苹果电脑的网页浏览器
    • Embedded Konqueror - PDA上的网页浏览器
    • SkyKruzer - SkyOS上的网页浏览器
    • ABrowse - Syllable操作系统上的网页浏览器
    • Nokia Series 60 移动电话的浏览器

    4.WebKit(跨平台)
    Webkit(Safari内核,Chrome内核原型。开源),是苹果公司自己的内核,也是苹果的Safari浏览器使用的内核。 Webkit引擎包括WebCore排版引擎及JavaScriptCore解析引擎,均是从KDE的KHTML及KJS引擎衍生而来,均是自由软件。在GPL条约下授权,同一时候支持BSD系统的开发。

    因此,Webkit也是自由软件,同一时候开放源码。在安全方面不受IE、Firefox的制约。所以Safari浏览器在国内还是非常安全的。

    Google Chrome、360极速浏览器以及搜狗快速浏览器快速模式也使用Webkit作为内核(在脚本理解方面,Chrome使用自己研发的V8引擎)。

    WebKit 内核在手机上的应用也十分广泛,如 Google 的手机 Gphone、 Apple 的iPhone。 Nokia’s Series 60 browser 等所使用的Browser内核引擎,都是基于WebKit。

    眼下。webkit内核是公认的最快的网页浏览方式。

    WebKit内核常见的浏览器:
    傲游浏览器3、Apple Safari (Win/Mac/iPhone/iPad)、Symbian手机浏览器、Android 默认浏览器。

    5.Chromium(跨平台)
    Chromium 是 Google 的chrome浏览器背后的引擎,其目的是为了创建一个安全、稳定和快速的通用浏览器。以BSD许可证等多重自由版权发行并开放源码。

    早自2006年開始开发。设计思想基于简单、快速、稳定、安全等理念。在架构上使用了Apple发展出来的WebKit排版引擎、Safari的部份源码与Firefox的成果,并採用Google独家开发出的V8引擎以提升解译JavaScript的效率,而且设计了“沙盒”、“黑名单”、“无痕浏览”等功能来实现稳定与安全的网页浏览环境。

    Chromium是Google为发展自家的浏览器Google Chrome(下面简称Chrome)而开启的计划,所以Chromium相当于Chrome的project版或称实验版(尽管Chrome自身也有β版阶段),新功能会领先在Chromium上实现,待验证后才会应用在Chrome上,故Chrome的功能会相对落后但较稳定。Chromium的更新速度非常快,每隔数小时即有新的开发版本号公布。而且能够免安装。下载zip封装版后解压缩就可以使用(Windows下也有安装版)。Chrome尽管理论上也能够免安装,但Google仅提供安装版。

    常见的Chromium内核的浏览器:
    Google Chrome、Chromium、SRWare Iron、Comodo Dragon
    使用Chromium开源码(基于webkit内核)的浏览器:
    360极速浏览器、枫树浏览器、太阳花浏览器、世界之窗极速版、傲游浏览器和UC浏览器电脑版等。
    搜狗快速浏览器和qq浏览器官网未提及Chromium,仅仅是说採用webkit内核。经网友測试这两款浏览器极有可能也是使用的Chromium。仅仅是官方不承认而已。

    6.Presto(跨平台)
    2003年,Presto是商业引擎,在Opera7中首次被使用,特点是渲染速度的优化达到了极致。然而代价是牺牲了网页的兼容性。此内核以前被Opera12.17及更早版本号所採用,现已停止开发并废弃。

    Presto是一个动态内核,页面的所有或者部分都能够在回应脚本事件时等情况下被又一次解析,且在执行Javascript时具有最快速度。依据在同等条件下的測试。Presto内核执行同等Javascript所需的时间仅约Trident和Gecko内核的1/3(Trident内核最慢,只是两者相差没有多大)。

    曾有小測试显示Presto部分快部分慢,各内核整体相当。仅仅是測试中Apple机的硬件条件和普通PC机不同所以没有測试WebCore内核。

    使用Presto的浏览器有:
    除开Opera以外。仅仅剩下NDSBrowser、Wii Internet Channle、Nokia 770网络浏览器等,发展前景受限制。
    眼下,Opera现已改用Google Chrome的Blink内核。

    7.Blink
    Blink是一个由Google和OperaSoftware开发的浏览器排版引擎,Google计划将这个渲染引擎作为Chromium计划的一部分,而且在2013年4月的时候公布了这一消息。这一渲染引擎是开源引擎WebKit中WebCore组件的一个分支。而且在Chrome(28及往后版本号)、Opera(15及往后版本号)和Yandex浏览器中使用。

    8.WebCore
    WebCore是苹果公司开发的排版引擎。是另一排版引擎“KHTML”基础上而来的。

    使用WebCore的主要有:
    Safari、OmniWeb、Shiira、Swift等。

二、JavaScript引擎

  • 概述
    JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,通常会附带在网页浏览器之中。比如:一个算圆周率的网页,排版引擎显示页面的框架,但终于结果须要用到 Javascript 来计算,所以Javascript引擎的快慢也影响着整个网页的速度。特别是眼下越来越多相似 WebQQ、Gmail 等大量应用了复杂的 Javascript 运算的站点,不同的引擎终于的速度差异会相当大。

    非常多时候,大家在评论哪个浏览器更快,事实上基本上指的是JavaScript的渲染速度,而不是页面的加载速度。在网速一定的情况下,各浏览器的页面加载速度区别不大。可是。越来越多的动态页面開始大量借助JavaScript,比方SNS、邮箱、网页游戏等。所以JavaScript在页面中的比重会越来越大。从而使得JavaScript的渲染速度也成为一个非常重要的指标。JavaScript的渲染速度越快,动态页面的展示也越快。
    Opera在JavaScript引擎的跑分上面一直都是非常牛逼的。一般来说最新測试版之间PK。Opera基本都会夺冠。

    1.Chakra
    Chakra由微软为其Internet Explorer 9 (IE9) 网页浏览器开发的JScript引擎。

    该引擎的32位元版本号(Internet Explorer 10才同一时候支援64位元)的一个特色是,它在一个独立的CPU核心上即时编译脚本,与浏览器并行。该引擎也能够訪问电脑的图形处理器(GPU),特别是对 3D 图形和视频的情况。

     

    引擎的提高则是为了回应不断发展的与之竞争的浏览器。IE 8 在Javascript 方面仍然落后于其他浏览器。于 2009 . 11 . 18举行的 SunSpider 測试展示了 IE9 的 PDC 版本号对脚本的执行远快于 IE8,可是仍然慢于Firefox 3.6, Chrome 4 和 WebKit Nightly。

    2.SpiderMonkey / TraceMonkey / JaegerMonkey

    SpiderMonkey(跨平台)
    Mozilla项目的一部分。是一个用C语言实现的JavaScript脚本引擎,另外另一个叫做Rhino的Java版本号。

    为了在SpiderMonkey中执行JavaScript代码,应用程序必须有三个要素:JSRuntime,JSContext和全局对象。
    SpiderMonkey应用在Mozilla Firefox 1.0-3.0。

     

    TraceMonkey
    Firefox启用于2008年。目标为改善Mozilla JavaScript引擎,并提高浏览器产生页面与回应时间的速度,即为了让Firefox能够与桌面端程式及各种新兴应用技术如Microsoft Silverlight与Adobe Flash相竞争。
    TraceMonkey应用在Mozilla Firefox 3.5-3.6版本号。

    JaegerMonkey
    随着竞争厂商陆续改善浏览器性能,竞争激烈。固Firefox逐渐落后。

    为此,Mozilla基金会为Firefox开发全新的JaegerMonkey引擎。


    JaegerMonkey应用在Mozilla Firefox 4.0及兴许的版本号。

    3.V8(JavaScript引擎)
    V8能够独立执行,也能够嵌入到不论什么C++应用程序。

    项目托管在Google Code上,基于BSD协议,眼下该JavaScript引擎已用于其他项目的开发。不论什么组织或个人能够将其源码用于自己的项目中。

    第一个版本号随着第一个版本号的Chrome与2008年9月2日公布。该引擎使用C++开发,并在谷歌浏览器中使用。

    在执行JavaScript之前,相比其他的JavaScript引擎转换成字节码或解释执行。V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs)。而且使用了如内联缓存(inline caching)等方法来提高性能。因此,JavaScript程序在V8引擎下的执行速度媲美二进制程序。

     

    应用:
    Chrome、傲游3。

    4.Nitro
    应用于Safari 4及兴许的版本号。

    5.Linear A/Linear B/Futhark/Carakan
    Linear A应用于Opera 4.0-6.1版本号;
    Linear B应用于Opera 7.0~9.2版本号;
    Futhark应用于Opera 9.5-10.2版本号;
    Carakan应用于Opera 10.5及兴许的版本号。

    7.KJS
    KHTML相应的JavaScript引擎。

     

三、有关的測试项目

  • V8引擎
    測试传送门,如今非常多“双核”浏览器都用它来跑分測试JavaScript引擎,分数越高越好。

  • Acid3
    測试传送门,主要是对网页标准的兼容性測试,目的是考核浏览器对于Web技术的支持。分数越高表示越符合网页的开发标准,满分是100分。

    2008年3月3日正式公布。其測试焦点集中在ECMAScript(ECMA-262标准化的脚本程序设计语言)、DOM Level 3( DOMImplementation,同意实现者挑选产品检測特性)、Media Queries(媒体查询)和data: URL。

  • HTML5
    測试传送门。測试浏览器对HTML5标准的支持,分数越高越好。

四、拓展

  • IETab
    这是一款浏览器扩展,并不是内核。

    在没有第三方编译版本号的时候。IETab一直是 Mozilla Firefox、Chrome等非Trident内核的浏览器的安装量最大的扩展之中的一个,方便用户在不开启IE的情况下调用Trident内核訪问一些兼容性比較差的站点。

    它解决非常多使用不规范语言、包括ActiveX或者要求IEonly的网页的浏览问题。可是绝大多数MozillaFirefox/GoogleChrome的扩展在使用IE tab浏览的标签页内无法使用。

  • Trident/Gecko双核浏览器

    尽管IETab能实现部分需求,可是深度订制的毕竟还是不一样,所以Trident/Gecko双核浏览器就诞生了,Sleipnir、Avant 12(Orca)是这类里面比較常见的。Avant 12因为有Orca的前期积累。所以轻车熟路。后面还打算添加Chromium。变成三核浏览器,可是偏偏如今Mozilla Firefox和Chrome都在疯狂刷版本号号,肯定有一部分精力要花在跟进版本号上。

  • Trident/WebKit双核浏览器
    如今国内最主流的“双核”浏览器基本都是这个架构,360极速浏览器、世界之窗浏览器极速版、傲游3、搜狗浏览器3、QQ浏览器、枫树浏览器、快快浏览器、百度浏览器、阿云浏览器(后期版本号)、太阳花浏览器。当中最奇葩的是傲游3。其他双核浏览器都是基于Chromium的,而傲游是基于WebKit的,可是偏偏又用的是V8引擎。

     

  • Trident/Gecko/WebKit三核浏览器
    眼下能见的应该就是日本的Lunascape,Avant添加了WebKit内核之后也会归类到这里。说实话。Lunascape比較难使用。

    各个内核相对独立。外壳本身不够强化,稳定性不高。

五、其他(參照其他资料)

  • Chrome/Chromium
    非常多人都会说自己用的双核浏览器是Chrome/IE双核的。或者说是基于Chrome的。事实上这样的说法并不对,因为Chrome本身并不开源,其他厂商是不能去定制Chrome的。能被修改、定制的是Chromium,Chrome的开源开发版本号,代码和Build都提供下载。

    Chromium/Chrome两个单词都是铬。各自是拉丁文和英文,除了名字之外。存在非常多不同。Chromium一天最多能够更新十几乃至二十个版本号,实验性的新特性都会如今这里放出,可是Chromium本身事实上并不稳定。

    Chrome总共同拥有四个更新分支:Canary、Dev、Beta、Stable。稳定性依次增强。

  • 一直被模仿。一直被超越的Opera
    Opera事实上非常好看也非常好用,而且极度创新(貌似全页面缩放、多标签浏览、鼠标手势、快速拨号等功能都是它首创的),可是市场占有率一直非常低。非常多非常好用的新特性总是被抄袭,所以大家笑称Opera“一直被模仿,一直被超越”。坊间传闻多标签页浏览器就是Opera发明的。可是貌似有人考究了这个传闻事实上不属实。

    只是快速拨号、Turbo浏览等功能就是扎扎实实Opera首创的。