你真的了解浏览器吗?

239 阅读8分钟

引言

在这个信息爆炸的时代,浏览器已经成为我们生活中不可或缺的一部分。无论是查找资料、在线购物、还是工作学习,与互联网的交互都离不开这个小小的窗口。然而,尽管我们经常使用浏览器,但对于它的内部运作机制、发展历程以及它如何影响我们的数字生活,我们却很少关注。

image.png

一、不同的浏览器

目前市场上有许多不同的浏览器,但大致可以分为IE浏览器和非IE浏览器。

image.png

  • Internet Explorer (IE)

    • 发布:首次发布于1995年,作为Windows 95 Plus!包的一部分。
    • 鼎盛时期:在2002年至2003年间,IE的市场份额一度超过90%,几乎垄断了浏览器市场。
    • 衰退:从2004年开始,随着Firefox、Chrome等竞争对手的出现,IE的市场份额逐渐下降。
  • 非IE浏览器

    • Firefox:由Mozilla基金会开发,首次发布于2004年,强调开源和用户隐私。
    • Google Chrome:首次发布于2008年,以其速度和扩展库迅速获得用户青睐。
    • Safari:苹果公司开发,首次发布于2003年,专为Mac和iOS设备优化。
    • Microsoft Edge:微软推出的替代IE的新浏览器,首次发布于2015年,最初基于EdgeHTML引擎,后来 转向Chromium内核。

Internet Explorer(简称IE)是微软公司开发的一款网页浏览器,曾经在20世纪末和21世纪初占据主导地位。然而,随着技术的发展和其他浏览器的崛起,IE逐渐失去了市场份额,并最终被微软宣布停止支持。

二、既然IE浏览器遗憾退场,那么谁又成为了当今主流呢?

Chrome浏览器凭借其卓越的性能、丰富的扩展支持、强大的安全性和隐私保护、先进的开发者工具以及广泛的平台兼容性,成为了全球最流行的浏览器之一。它不仅为普通用户提供了流畅、安全的浏览体验,也为开发者提供了强大的开发和调试工具。很多国产浏览器都基于Chrome内核构建。

image.png

三、使用Chrome浏览器深入挖掘浏览器底层原理

先了解一下什么是进程线程

进程(Process)和线程(Thread)是操作系统中用于组织和管理程序执行的两个基本概念。

进程与线程的区别

image.png

进程与线程的联系

1. 包含关系
  • 进程包含线程:一个进程可以包含多个线程,但每个线程必须隶属于某个进程。换句话说,线程不能独立存在,它总是依附于某个进程。
  • 单线程与多线程:一个进程至少有一个线程(即主线程),也可以有多个线程来并发执行不同的任务。
2. 资源分配
  • 进程拥有独立资源:每个进程都有自己独立的内存空间、文件描述符、堆栈等资源。操作系统为每个进程分配必要的资源。
  • 线程共享进程资源:同一进程内的所有线程共享该进程的资源,包括内存地址空间、文件描述符、全局变量等。这使得线程间的通信更加容易和高效,但也可能导致资源竞争问题。
3. 调度单位
  • 进程调度:操作系统将CPU时间片分配给进程,决定哪个进程可以在某个时刻运行。进程切换涉及到保存和恢复进程的上下文(如寄存器状态、内存映射等),开销较大。
  • 线程调度:在多线程环境中,操作系统可以在同一个进程内调度不同的线程。线程切换的开销较小,因为它们共享相同的内存空间和资源,不需要重新加载内存映射或文件描述符。
4. 通信机制
  • 进程间通信 (IPC):由于进程有独立的地址空间,不同进程之间需要通过特定的通信机制(如管道、消息队列、共享内存、信号等)进行通信。
  • 线程间通信:同一进程内的线程可以直接访问共享资源,因此它们之间的通信更加直接和高效。常见的线程间通信方式包括锁(Lock)、条件变量(Condition Variable)、信号量(Semaphore)等。
5. 并行执行
  • 进程并行执行:在多核或多处理器系统上,多个进程可以真正地并行执行,因为每个进程有自己的独立资源和上下文。
  • 线程并行执行:在同一进程内,多个线程也可以并行执行,特别是在多核或多处理器系统上。线程的并行执行可以提高程序的响应速度和效率。

四、浏览器做了啥?

260bdb678725d93d038541cca31e6b26.gif

我们都会使用浏览器,无非就是输入URL来显示查找的页面,那么,从输入URL 到页面显示浏览器做了什么呢? Google Chrome 采用多进程架构来提高浏览器的性能、稳定性和安全性。每个进程负责不同的任务,确保一个进程中的问题不会影响其他进程。这个多进程就包括了以下四个进程:
1. 浏览器主进程 (Browser Process)
  • 界面显示:负责渲染用户界面(UI),包括地址栏、标签页、书签栏等。
  • 用户交互:处理用户输入事件,如点击、键盘操作等。管理事件冒泡和捕获机制。
  • 子进程管理:通过IPC(Inter-Process Communication,进程间通信)管理所有子进程(如渲染进程、插件进程、GPU进程等)。负责创建、销毁和监控这些子进程。
  • 存储功能:管理浏览器的持久化存储,如Cookies、LocalStorage、IndexedDB等。确保数据的安全性和一致性。
  • 安全:实施各种安全策略,如同源策略、CORS、沙箱机制等,保护用户隐私和数据安全。
2. 渲染进程 (Renderer Process)
  • 排版和布局:使用Blink渲染引擎(基于WebKit分叉而来)解析HTML、CSS并生成DOM树和样式化的树,进行页面布局计算。
  • JavaScript执行:集成V8 JavaScript引擎,负责解释和执行JavaScript代码。JavaScript是单线程的,但支持异步操作(如setTimeoutPromiseasync/await等)。
  • 独立性:每个标签页(Tab)通常运行在一个独立的渲染进程中。这样,即使某个页面崩溃或卡顿,也不会影响其他页面的正常运行。
  • 沙箱机制:渲染进程运行在操作系统级别的沙箱环境中,限制其对系统资源的访问,提高安全性。
  • 硬件加速:对于某些图形密集型操作(如3D绘制、视频播放等),渲染进程会与GPU进程协作,利用硬件加速提升性能。
3. 插件进程 (Plugin Process)
  • 插件管理:负责管理和运行各种插件(如Flash、PDF阅读器等)。插件进程也运行在独立的沙箱中,确保插件崩溃不会影响整个浏览器。
  • 扩展支持:Chrome扩展程序(Extensions)也运行在插件进程中,提供额外的功能和自定义选项。扩展程序可以通过API与浏览器内核交互,但受到严格的安全限制。
4. GPU进程 (GPU Process)
  • 3D绘制:负责处理WebGL、CSS 3D变换(如translate3Drotate3D等)、Canvas 2D/3D绘图等图形密集型任务。通过调用显卡API(如OpenGL、DirectX等),利用GPU硬件加速提升性能。
  • 视频解码:处理视频解码和编码任务,减轻CPU负担,提高视频播放的流畅度。
  • 合成(Compositing):将多个图层(Layer)合并成最终的页面图像,特别是对于复杂的动画和滚动操作,GPU进程可以显著提升性能。
  • 硬件加速:充分利用显卡的显存和计算能力,提供更流畅的图形和视频体验。

总结

随着我们对浏览器的深入了解,我们不仅见证了技术的进步,也感受到了它对我们生活方式的深刻影响。浏览器作为连接用户与互联网的桥梁,其发展和创新仍在继续。从最初的信息展示工具,到现在的多功能平台,浏览器的演变反映了人类对技术不断追求卓越的精神。随着人工智能、大数据和云计算等技术的融合,浏览器将变得更加智能和强大。浏览器不仅是技术的结晶,更是人类智慧的延伸。