浏览器内核及渲染模式的介绍

     首先要引入一个概念——排版引擎(Layout Engine,Rendering Engine),就是常常上网的人也许都据说过的浏览器内核,负责解析网页语法(如HTML、JavaScript)并渲染、展现网页各品牌浏览器的内核是不一样的,不一样的内核处理同一段代码的时候思路不一样。所以能够说,浏览器间内核的差别是产生兼容性问题的根本缘由。这就是咱们苦逼前端工程师们常常但愿浏览器大一统的缘由了。固然这只是个梦,那好咱们回归现实,下面我将对四种经常使用的浏览器内核进行简单的介绍。前端

      Trident程序员

      Trident(IE内核):该内核程序在1997年的IE4中首次被采用,是微软在Mosaic代码的基础之上修改而来的,并沿用到IE11,也被广泛称做”IE内核”。Trident其实是一款开放的内核,其接口内核设计的至关成熟,所以才有许多采用IE内核而非IE的浏览器(壳浏览器)涌现。因为IE自己的“垄断性”而使得Trident内核的长期一家独大,微软很长时间都并无更新Trident内核,这致使了两个后果——一是Trident内核曾经几乎与W3C标准脱节(2005年),二是Trident内核的大量 Bug等安全性问题没有获得及时解决,而后加上一些致力于开源的开发者和一些学者们公开本身认为IE浏览器不安全的观点,也有不少用户转向了其余浏览器,Firefox和Opera就是这个时候兴起的。非Trident内核浏览器的市场占有率大幅提升也导致许多网页开发人员开始注意网页标准和非IE浏览器的浏览效果问题。国内大部分浏览器(好比360)都是“双核”甚至是“多核”,其中一个内核是Trident,而后再增长一个其余内核。国内的厂商通常把其余内核叫作“高速浏览模式”,而Trident则是“兼容浏览模式”,用户能够来回切换。(补充:IE从版本11开始,初步支持WebGL技术。IE8的JavaScript引擎是Jscript,IE9开始用Chakra,这两个版本区别很大,Chakra不管是速度和标准化方面都很出色。)web

       Gecko算法

       Gecko(Firefox内核):Netscape6开始采用的内核,后来的Mozilla FireFox(火狐浏览器) 也采用了该内核,Gecko的特色是代码彻底公开,所以,其可开发程度很高,全世界的程序员均可觉得其编写代码,增长功能。由于这是个开源内核,所以受到许多人的青睐,Gecko内核的浏览器也不少,这也是Gecko内核虽然年轻但市场占有率可以迅速提升的重要缘由。
 
      Presto

      Presto是一个由Opera Software开发的浏览器排版引擎,目前Opera 7.0~10.00版本使用该款引擎。Presto的特色就是渲染速度的优化达到了极致,它是目前公认的网页浏览速度最快的浏览器内核,然而代价是牺牲了网页的兼容性。浏览器

      Presto 其实是一个动态内核,与Trident、Gecko等内核的最大区别就在于脚本处理上,Presto有着天生的优点,页面的所有或者部分 都可以在回应脚本事件时等状况下被从新解析。此外该内核在执行JavaScript时有着最快的速度,根据同等条件下的测试,Presto内核执行同等 JavaScript所需的时间仅有Trident和Gecko内核的约1/3。不过,不足之处在于Presto是商业引擎,使用Presto的除了 Opera之外,只剩下NDS Browser、Nokia 770网络浏览器等,这在很大程度上限制了Presto的发展。 Opera Widget引擎采用的就是Presto引擎。安全

      Webkit网络

      Webkit(Safari内核,Chrome内核原型,开源):它是苹果公司本身的内核,也是苹果的Safari浏览器使用的内核。 Webkit引擎包含WebCore排版引擎及JavaScriptCore解析引擎,均是从KDE的KHTML及KJS引擎衍生而来,它们都是自由软件,在GPL条约下受权,同时支持BSD系统的开发。因此Webkit也是自由软件,同时开放源代码。在安全方面不受IE、Firefox的制约,因此Safari浏览器在国内仍是很安全的。
      限于Mac OS X的使用不普遍和Safari浏览器曾经只是Mac OS X的专属浏览器,这个内核自己应该说市场范围并不大;但彷佛根据最新的浏览器调查代表,该浏览器的市场甚至已经超过了Opera的Presto了——固然这一方面得益于苹果转到x86架构以后的人气暴涨,另外也是由于Safari 3终于推出了Windows版的缘故吧。Mac下还有OmniWeb、Shiira等人气很高的浏览器。
       Google Chrome、360极速浏览器以及搜狗浏览器高速模式也使用webkit做为内核(在脚本理解方面,Chrome使用本身研发的V8引擎)。WebKit 内核在手机上的应用也十分普遍,例如 Google 的手机 Gphone、 Apple 的iPhone, Nokia’s Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit。
 
        下面将引入另外一个概念,浏览器的工做模式也称为“渲染模式”。实际上浏览器不一样的工做模式不只对渲染有影响,对代码的解析以及脚本的行为也一样有影响。
因此说内核相同,渲染模式不一样也会产生兼容性的问题。让咱们来看看渲染模式的产生来源:         

       微软于 2001 年 8 月 27 日发布的 IE6(Internet Explorer 6)加强了对 CSS1 的兼容,这使得 IE6 对 CSS 的解析及渲染与它的前一个版本 IE5.5 有了很大的差异,如对盒模型的理解、表格尺寸的算法等。前端工程师

       为了保持良好的向后兼容性,微软为用户提供了一个“开关”,来决定浏览器的工做模式,这个“开关”就是页面顶部的 DTD。
       某些 DTD 将使 IE6 工做在“标准兼容模式”(即“标准模式”),这种模式使用了 IE6 最新的处理方式,包括对 CSS1 的兼容及一些 DHTML 方面的加强。
而另外一些 DTD,包括不设置 DTD 将使 IE6 工做在“向后兼容模式”(即“混杂模式”),这种模式对页面的处理是与 IE5.5 保持一致的,这样就能够保证对一些在 IE5.5 中表现良好的页面在 IE6 中也能达到一样的效果。
      微软在后续推出的 IE七、IE8 中,也使用了上述“开关”,与 IE6 同样,在 IE七、IE8 的“混杂模式”下,对页面处理方式仍与 IE5.5 一致。所以能够说,IE 系列的“混杂模式”,将浏览器的行为冻结在了 IE5.5 这个版本,虽然 IE 各版本的混杂模式也略有区别,但它们的本意都是向后兼容。架构

      随着时间的推动和标准的进步,IE六、IE7 的“标准模式”逐渐已经变得不够标准了,2009年3月19日发布的 IE8 从新定义了“标准模式”,再次加强了对标准规范的支持,同时为了保持对 IE7 的兼容,IE8 增长了一种工做模式:“接近标准模式”。因而,IE8 的工做模式就分红了三种:“标准模式”、“接近标准模式”和“混杂模式”。ide

      目前全部主流浏览器对于向后兼容问题的处理都与 IE 系列同样,提供了不一样的模式来保证向后兼容。

      浏览器的工做模式就是在这种背景下诞生的,它很好的解决了浏览器对标准支持上的不断加强及对一些错误的修复而致使的向后兼容问题,但也将浏览器在不一样状况下的表现及行为变得更加复杂多样。

      经过以上的内容,咱们能够得出结论:若是一个页面能使各浏览器都工做在“标准模式”下,那么各浏览器都将尽可能兼容标准,所以各浏览器之间表现出的差别是不多的。相反,若是一个页面使各浏览器都工做在“混杂模式”下,那么各浏览器都将尽可能向后兼容,所以各浏览器之间表现出的差别将会最大化。

附录: 一些常见的 doctype
      
        在编写一个页面时,要使用能够触发各浏览器“标准模式”的DTD,并书写符合规范的代码,以保证您的页面在各浏览器中能够最大程度的兼容。相信你们看了这些会对浏览器的兼容性有更深入的了解,最起码知道那些万恶bug的来源了。
相关文章
相关标签/搜索