浏览器:发展历程
从第一个诞生的浏览器到如今,浏览器发生了怎样的变化?
一、架构
单进程浏览器
单进程浏览器是指浏览器所以模块都运行再同一个进程里,这些模块包含了网络、插件、JavaScript 运行环境、渲染引擎和页面等。
2007年之前,所有的浏览器都是单进程的,页面的所有的功能模块都运行在同一个进程里,这个模块包括但不限于:网络、渲染引擎、JavaScript运行环境、第三方插件等。
缺点:
不稳定:早期的浏览器都是通过插件来实现视频、游戏等功能,插件、渲染引擎等都运行在浏览器进程之中,一个意外崩溃就会导致整个浏览器的奔溃。
不流畅:因为所有页面的功能模块都运行在同一个线程之中,因此同一时刻只有一个模块可以执行,这就很有可能出现一个模块发生阻塞的时候而导致其他模块无法运行的情况。
不安全:不安全主要是处于两个方面的,一个是插件一个是页面脚本。页面中运行的插件可以读取电脑的资源,执行一些命令。而页面脚本则可以通过浏览器漏洞来获取系统权限,从而应发一系列安全问题。
多进程浏览器
浏览器包括:1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程。
浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
渲染进程。核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
GPU 进程。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
网络进程。主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
插件进程。主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
多进程的浏览器存在着一些问题:
资源占用更多了
更为复杂的体系结构
二、厂商
1995年,网景公司推出的Navigator浏览器
1996年,微软推出的Internet Explore浏览器(IE浏览器)
2002年,IE浏览器完胜,占据96%的市场份额(一家独大,浏览器没有完全按照W3C/ECMA的标准去解析HTML/CSS/JS代码,导致了IE中有很多的兼容问题,IE6~8)
2004年,Firefox火狐浏览器诞生
2008年,Chrome谷歌浏览器(webkit内核,特色:V8引擎处理性能优越,缺点吃内存)
三、内核
内核可以分成两部分:渲染引擎(layout engineer)或(Rendering Engine)和 JS 引擎。内核负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。JS 引擎则是解析 Javascript 语言,执行 javascript 语言来实现网页的动态效果。
常见的内核:
- Trident(IE(4~11)):该内核开放接口,但不是开源,所以曾经出现过很多基于IE内核的浏览器
- Gecko(Firefox):NetSpace是Firefox的前生,故也是该内核,且该内核开源
- Presto(Opera(1~14)):不开放接口也不开源,Opera14之后改用了Blink,限制Presto发展的原因主要是只有Opera采用了该内核,而Opera也主要只在Windows下运行
- WebKit(Safari, Chrome(1~27)):该内核开源,由早期的KHTML演化而来
- Blink(Chrome(28 ), Opera(15 )):该内核由Google和Opera Software一起开发,基于WebKit中的WebCore引擎,开源
- Edge(Edge):微软代替IE的一个新兴浏览器,捆绑在Windows10上,不开放接口也不开源
参考文章: