浏览器内核揭秘

  • 格式:doc
  • 大小:16.00 KB
  • 文档页数:3

浏览器内核揭秘
作者:技术宅
来源:《电脑爱好者》2013年第09期
今年关于Opera的两条新闻颇耐人寻味,一条是二月份的时候,Opera宣布放弃自家的Presto引擎改用WebKit,而到了4月初,Opera又宣布紧随Google的脚步支持新的渲染引擎Blink。

为浏览器更换内核绝非易事,Opera不同寻常的“频繁”更换,预示着浏览器市场可能要重新洗牌。

那么,浏览器内核到底是什么,它是如何工作的,为何各大软件厂商在这上面要针锋相对呢?
浏览器内核的四大金刚
我们平时所使用的浏览器软件,一般来说可分成两大部分:Shell+内核(也称引擎)。

Shell也就是浏览器的外壳,比如窗口、菜单、工具栏等等,说白了就是浏览器跟用户交互的界面,通过Shell,我们可以对浏览器进行各种设置,调用内核的各种功能。

这就像汽车的外观、仪表、方向盘、导航等外围设备一样,用来使用和控制汽车。

而内核才是浏览器的核心,它实际就是一些程序和模块的集成,为浏览器提供主要功能,主要负责取得网页的内容(如HTML、XML、图像、CSS)并进行分析、显示,执行网页中的Javascript脚本等。

继续以汽车为比喻,它就如同汽车的发动机引擎,是汽车运行的真正动力。

其实在浏览器发展初期,外壳和内核并没有明确的划分,它们的功能往往混合在一起。

这种方式的缺点很明显,一旦某项功能有所改进,那么与此项功能相关的程序代码都要重新改写,费时费力。

于是为了便于软件的升级和维护,引进了模块化的思想,渐渐将外壳和内核分开,这样一来,即使内核升级了,只要它保持向下兼容,那么原来在它基础上开发出来的浏览器软件,不用作任何修改,就能继续使用。

就像汽车生产厂商有很多而发动机厂商却很少一样,真正能提供浏览器内核的软件厂商也是曲指可数。

当前主流内核有Trident、Gecko、WebKit、Presto四大家,其中Trident就是我们俗称的IE内核,Gecko是Firefox所用的内核,Webkit是苹果和谷歌所用的内核,Presto是Opera所用的内核。

不过WebKit、Presto这两大内核现在的处境则有点微妙,谷歌决定单干,脱离Webkit转向自己的Blink内核(基于Webkit),而Opera也明确表示放弃自有的Presto转向谷歌。

可以预计,在未来的四大内核列表中,Presto的位置将由Blink取代。

浏览器工作的基本流程
当我们在浏览器中输入一个网址并按下回车键,或者点击网页中的一个超级链接,浏览器将创建一个URL请求。

浏览器首先在本地的缓存文件中查询,如果你之前已经访问过这个网页,那么该网页的相关数据可能已被缓存到本地了,浏览器找到这些数据后将直接读取它们,并返回结果显示网页。

注意,此时显示的网页实际是上次的访问结果,不一定是最新的。

如果你不曾访问过该网页,浏览器在缓存中没有找到相关信息,它就会将URL请求发送到DNS服务器上,DNS将网址解析成真正的IP地址后,返回给浏览器。

这就是域名解析阶段(DNS Lookup)。

浏览器取得真实的IP地址后,开始与所要访问的网站服务器直接建立连接,这就相当于在浏览器和网站之间架起一个虚拟通道,这是创建连接阶段(Connection)。

连接成功后,浏览器向服务器发送HTTP请求消息,一般包括HTTP头消息、POST或GET请求、Cookies 等,这是发送请求阶段(Send)。

服务器对浏览器提交的HTTP请求进行分析处理,浏览器则等待服务器的响应(Wait)。

服务器分析处理完毕,会将浏览器所请求的资源,比如HTML文件、XML文件、CSS文件、JS脚本文件、图像等,传送给浏览器,浏览器边接收这些数据边同步显示网页(Receive)。

浏览器内核做什么
上面简述的浏览器工作流程中,最后一部分,接收服务器端传来的信息,分析处理并同步显示网页,正是浏览器内核最繁忙、最主要的工作部分。

浏览器的内核并非铁板一块,而是由多个模块组合而成,不同模块负责不同的工作。

它主要包括以下几大部分:
★浏览器引擎:用来查询及操作渲染引擎的接口。

★渲染引擎:负责解析HTML、XML、CSS等,并将解析结果显示出来。

★JS解释器:用来解释执行网页中的JS代码,是动态网页的必备内容。

其中渲染引擎又是浏览器内核中的重中之重,它主要负责网页的显示。

以Webkit内核为例(即当前的苹果、谷歌浏览器内核),在读取HTML网页文件后,首先通过HTML分析器对网页进行分析,在此基础上形成DOM节点树,再与CSS样式表一起构建出Render树,Render树是由一些包含有颜色和大小等属性的矩形组成的,它按照一定的顺序显示在屏幕上,接着将确定每个节点在屏幕上的确切坐标。

这些布局完成后,下一步就是绘制、显示网页了。

浏览器如何调用内核
网页渲染、JS脚本解析,这些需要很复杂的技术处理。

不过一般的程序员不用掌握这些技术,一样可以开发出自己的浏览器来。

为什么?正如前面所说,多家软件巨头对外提供自己开发出的浏览器内核,这些内核已经解决了浏览器的大部分问题,一般程序员只要调用其中的功能就可以了。

打一个通俗的比喻,微软已经完成了网页显示的程序编制,它将此功能打包在IE内核中,然后假设它把这个功能编号为1。

对于第三方浏览器的开发者来说,他就不需要自己再开
发网页显示的功能了,他只需要将IE内核包含在自己的浏览器程序中,在需要显示网页的时候,简单地发出一条指令,直接调用内核的1号功能就可以了。

这就如同MP3音乐播放器,不需要知道它的构造,只需知道按哪个键播放、按哪个键暂停就可以了。

国内的浏览器,如傲游、360、搜狗等等,都号称为双核浏览器,那么它们是怎么做到的?看似复杂,其实也很简单,它们只是把微软的IE内核和谷歌的Webkit内核都打包在自己的程序中。

当需要以IE兼容方式显示网页时,就发指令到IE内核中调用相关功能,当需要以极速方式显示网页时,就发指令到Webkit内核中调用就可以了。

当然,浏览器内核只提供了基本的功能,第三方浏览器可以在此基础上添加更多功能,以形成自己的特色。

比如国内各大浏览器,争取提供更漂亮的程序界面,以及网页保存为图片之类的其他实用功能等,而这些已与内核关系不大了。

谷歌为什么开发自己的内核
苹果和谷歌浏览器都是基于Webkit内核的,不过一直是苹果在主导。

谷歌的收入来源基本上以网络为主,而浏览器又是网络的主要入口,所以谷歌对浏览器内核的期望非常之高。

相比之下,苹果的主要收入来自硬件产品销售,对网络的兴趣肯定没有谷歌高,这就导致了两家公司对待Webkit发展的意见分岐,也是促使谷歌下决心开发自己主导的浏览器内核的动力所在。