小谈浏览器内核
浏览器(web browser),现下算不上什么新鲜玩意,相关的技术知识也没有多么高深。
以前我就对浏览器相关的东西做过一些总结,现在整理一下,权当笔记了。
什么是浏览器
说的有历史感一些,浏览器对于那些喜欢网上冲浪的童鞋可说灰常熟悉了,但如何具体描述它是啥呢?
浏览器是一种用于检索并展示万维网信息资源的应用程序。这些信息资源可为网页、图片、影音或其他内容,它们由统一资源标志符标志。信息资源中的超链接可使用户方便地浏览相关信息。
我们可以说的更有条理一点,就是具有以下特点或功能的应用程序:
1、可用于使用万维网
2、提供丰富的用户界面,一般会有地址栏、收藏夹、刷新、上下页等功能
3、可打开多种由统一资源标识符标志的信息资源,文本、图片、音视频、超链接等等
4、支持解析多种网页标准,如HTML5、CSS、JavaScript等
5、支持多种文件格式及协议
以及补充的两点:
网页浏览器虽然主要用于使用万维网,但也可用于获取专用网络中网页服务器之信息或文件系统内之文件。另外,现在的浏览器还可通过许多插件来拓展其功能。
浏览器内核是什么
所谓内核,自然就是一件东西最重要最关键的部分了,那么,浏览器最重要的的部分是什么呢?
首先,浏览器一般由七个模块组成,User Interface(用户界面)、Browser engine(浏览器引擎)、Rendering engine(渲染引擎)、Networking(网络)、JavaScript Interpreter(js解释器)、UI Backend(UI 后端)、Date Persistence(数据持久化存储)。
不一一做详细介绍了,其中最重要的,是Rendering Engine,翻译为排版引擎、解释引擎、渲染引擎,它负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染,也就是显示网页。
当然,JS解释器也很重要,因为它是执行 javascript 语言来实现网页的动态效果的,最开始时渲染引擎和JS解释器并没有明确区分,后来JS解释器越来越独立,二者就被分开来看待。
所以,浏览器内核一般就倾向于指渲染引擎了。
浏览器内核有哪些
浏览器内核并不只有一种,不同的浏览器内核对网页编写语法的解释也有不同,因此,同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。
现下流行的浏览器内核有五种:Trident、Gecko、Presto、Webkit、Blink
Trident(IE内核)
这个内核是由微软公司开发的,最早于1997年的IE4中被采用,沿用至IE11,故也被普遍称作”IE内核”。Trident实际上是一款开放的内核,其接口内核设计的相当成熟,有许多非IE的浏览器也采用IE内核。
当年IE借助Windows的垄断地位,IE也牢牢占据了市场的有利地位,并在第一次浏览器大战中获胜。所谓“骄傲使人落后”,1998年IE5发布,8年后后微软才更新至IE7,再三年后才推出IE8。
长时间未更新的Trident内核,一方面使其几乎与W3C标准脱节(2005年),另一方面,它自身大量的bug和安全性问题没有得到及时解决,加上一些致力于开源的开发者和一些学者们公开自己认为IE浏览器不安全的观点,有很多用户转向了其他浏览器。
不过,2011年的IE9为微软挽回了颜面(虽然没能拿回市场份额),Trident开始支持HTML5和CSS 3,因此我们也经常会看到有些网站在浏览时会提示用户“在Internet Explorer 9.0+以上浏览效果最佳”。前端程序员做浏览器兼容一般也不再会考虑IE8之前的浏览器了。
Gecko(Firefox内核)
这是Netscape6开始采用的内核,第一次浏览器大战网景公司(Netscape)大败以后,它的部分成员创办了Mozilla基金会,并于2004年推出Mozilla FireFox(火狐浏览器),采用的内核就是Gecko。
Gecko的特点是代码完全公开,因此,其可开发程度很高,全世界的程序员都可以为其编写代码,增加功能,因此受到许多人的青睐。
而FireFox的推出,标志着第二次浏览器大战开始,这里不多说了。
Presto(Opera前内核) (已废弃)
作为“一直被模仿,一直被超越”的代表Opera公司,在2003年的Opera7中首次使用了Presto作为内核,该款引擎的特点就是渲染速度的优化达到了极致,然而代价是牺牲了网页的兼容性。
实际上这是一个动态内核,与其他几个内核的最大的区别就在脚本处理上,Presto有着天生的优势,页面的全部或者部分都能够在回应脚本事件时等情况下被重新解析。此外该内核在执行Javascrīpt的时候有着最快的速度。只可惜Presto是商业引擎,除开Opera以外,使用Presto的浏览器很少,极大地制约了它的发展。
甚至后来,Presto停止开发并废弃,Opera也改用了Google Chrome的Blink内核。
Webkit(Safari内核,Chrome内核原型)
Webkit的“始作俑者”乃是苹果公司,苹果的Safari浏览器使用它作为内核。
Webkit是开源的,前身是KDE小组的KHTML,当年苹果在比较了 Gecko 和 KHTML 后,选择了后者,因为它拥有清晰的源码结构、极快的渲染速度。Apple将KHTML发扬光大,推出了装备KHTML改进型WebKit引擎的浏览器Safari。
Safari浏览器当初只是Mac OS X的专属浏览器,限于Mac OS X的使用不广,这个内核本身应该说市场范围并不大,但后来苹果转到x86架构之后人气暴涨,苹果成为手机行业的巨头,再加上Safari3也推出了Windows版的缘故,市场占有量大涨。
但是Webkit的发扬光大者却是Chrome,一提到Webkit,许多人首先想到的却是chrome。当初Webkit面世之初,苹果将其用于IOS操作系统的Safari浏览器上,而谷歌则把它作为内核用在Android系统的Chrome浏览器上,后来Chrome对Webkit内核越用越顺手,Chrome浏览器也越来越深入人心,大家就把二者联系到了一起。
但是,2013年谷歌宣布和Webkit分道扬镳,在Chromium项目中研发Blink渲染引擎。
Blink
其实Blink引擎是Webkit的分支,就像Webkit是KHTML的分支一样。谷歌并未放弃Webkit内核,而是做了修订和精简,去掉了几十万行代码。这样,Google对Blink的改动将自由得多,不像对WebKit的改动时刻受Apple掣肘。
同时,在Opera弃用了自己的Presto内核后,也加入了Google阵营,参与Blink的研发。
如今的Chrome浏览器风头正盛,2018年浏览器排名为第一。甚至最近还有新闻,说微软要抛弃Edge投向chromium的怀抱。
但是,我找遍无数主流浏览器,却找不到使用Blink内核的浏览器,甚至连Chrome有没有在用Blink内核都说不好,如果你在网上进行浏览器内核版本检测的话,会发现即便是Chrome浏览器还是会显示为Webkit内核。难道Blink还停留在“未来的Chrome渲染引擎”说辞上?还是Blink要归类于Webkit?那这样的话,苹果也算报了谷歌“夺走”Webkit的一箭之仇了。
不过,谷歌公司chromium项目的推出,带动了许多国内浏览器行业的发展,许多使用Chrome内核的单核双核浏览器接连问世。而至于去年那款融资2.5亿的“国产”浏览器红芯,被曝抄袭Chrome,是个反例,在此不予评论。
何为双核浏览器
我们用到的许多国产浏览器,“号称”什么双核,看起来很厉害的样子,其实说白了也没什么,无非就是同时用了以上说到的几种内核中的两个。
而浏览器双核不同于CPU双核,就好比一辆车,CPU双核可以理解为内置了前后两台发动机,浏览器双核则是车子配置了不同的轮胎,需要的时候换着用。一般的双核浏览器拥有IE兼容内核和非IE极速内核两个内核。
之所以要这样做,很大程度上是因为许多网上银行和支付系统只支持IE的Trident内核,其他浏览器访问根本无法进行正常支付和转账等业务,而Webkit内核的非IE浏览器有更高的性能和更好的用户体验。在不用网上交易的一般网站,双核浏览器使用速度快的WebKit内核访问,即“高速模式”;在访问支付宝或网上银行的时候,就切换至Trident内核的“兼容模式”来进行业务。
但双核浏览器也存在缺陷,比如有些浏览器在手动切换后会将其记录为默认模式,以后访问任何站点时都使用此模式,除非重新安装才能恢复自动切换功能。另外自动切换有时也会造成session(会话)丢失的情况,非常影响用户使用,也是很严重的问题了。
以上就是大体对这几种浏览器内核做的梳理,顺便简单说了一下双核浏览器,也不知讲的是否明白。
总而言之,开放性是互联网的一大特点,无论是技术还是产品,经常是你中有我,我中有你,想要区分清楚并不容易,但是对未来的探索却是无止境的。