尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

精读 GitHub - servo 浏览器(一)

精读 GitHub - servo 浏览器(一)
📅 发布时间:2026/6/18 23:21:18

精读 GitHub - servo 浏览器(一)

一、简介

项目地址:https://github.com/servo/servo

这一期的精读 GitHub 系列是 servo 浏览器,我们将从源码的角度去拆解 servo 浏览器,逐步厘清整个浏览器的工作原理。

servo 是一款实验性质的现代浏览器引擎,采用 Rust 语言编写(其实是为了写 servo 创建了 Rust 这门语言,但 servo 没火,Rust 先火起来了!),servo 目前还没有独立的 App,需要使用 servoshell 来运行网页;servo 不仅展示了 Rust 语言在系统编程中的强大能力,还开创了并行化布局和渲染的全新理念(其中很多已经被 Firefox 吸收),是一个学习浏览器原理与 Rust 语言非常棒的开源项目。

自 2012 年以来,目前已收获 30K+的 star:
在这里插入图片描述

二、安装使用

这里我们以 macOS 为例,介绍如何在编译 servo,以及在 servo 上运行一个网页,其他操作系统按照官方 README 步骤操作即可。

macOS 上编译 servo 步骤:

1)下载 servo 源码:

git clone https://github.com/servo/servo

2)安装 Xcode 和 brew

3)安装uv

curl -LsSf https://astral.sh/uv/install.sh | sh

4)安装 rustup

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

5)重启命令行保证安装的工具生效,在 servo 根目录下运行./mach bootstrap安装依赖

6)在 servo 根目录下运行./mach build进行编译:mach 是 servo 的构建和管理工具

编译成功后,可以通过如下命令运行一个网页:

# 运行网页
./mach run https://example.com# 无头浏览器模式运行:不启动图形界面
./mach run --headless https://example.com

效果如下:
image

三、架构介绍

3.1 目录结构

在这里插入图片描述
以./mach run ​https://baidu.com命令运行为例,来深入理解这些目录之间是如何协同工作的:

1)ports/servoshell 启动程序,调用 components/constellation 创建一个新的 Tab

2)constellation 指挥 components/net 去下载网页

3)下载的 HTML 传给 components/script 解析成 DOM 树

4)components/style 并行计算样式,附着在 DOM 上

5)components/layout 读取 DOM 和样式,计算位置,生成布局树(Layout Tree)

6)最后,结果被送到 components/compositing 显示到屏幕上

3.2 架构图

在这里插入图片描述
上图是单内容进程时的架构图,实际上每个 tab 都可以视为一个进程。

关键点:

1) Constellation

核心协调者,可以理解为 tab 管理器,用于管理多个任务管线(Pipeline)

2)多 Pipeline 并行

图中展示了 A 和 B 两个 Script 线程,servo 在设计上支持一个进程内运行多个独立的渲染管线,比如 iframe 可以有自己独立的管线

3)Script 与 Layout 分离

每个 Script 线程都有一个专属的 Layout 线程

从图中可以看出,网页处理主要分为三个阶段:

阶段 核心职责 说明
Script 所有权 DOM 树,执行 JavaScript,处理导航事件等 当需要知道元素位置(如 offsetWidth)时,必须发消息询问 Layout
Layout 快照 DOM 树,计算样式,构建 Box Tree 和 Fragment Tree 最终生成 Display List 并发送给 Compositor
Compositor UI 线程,接收显示列表,转发给 WebRender 进行 GPU 渲染 UI 事件(如点击、滚动)的第一接收者,通常会将事件转发给 Script 处理

3.3 servo 的加速秘籍

servo 在哪些地方变快了,又是怎么做到的呢?

可以总结如下:
在这里插入图片描述

四、总结

通过本文,我们对 servo 有了整体的了解,后续,我们将从源码角度逐步拆解各部分。

更多精彩内容在公众号 「非专业程序员Ping」,欢迎订阅交流!

相关新闻

  • 页面
  • 多重背包 二进制拆分这个向左移动以为是2也是被我写出来了
  • NOIP2025

最新新闻

  • 2026厦门百达翡丽回收实力排行榜!本地七大正规机构权威排名 - 薛定谔的梨花猫
  • eNSP - BGP 诊断命令实战指南
  • 北京黄金回收避坑攻略:认准“秤不改、火不假、价不虚”这三大准测 - 奢侈品回收测评
  • 联调测试:问题都藏在边界里
  • 覆盖上海近郊全域网点,2026 黄金回收城郊门店综合参考榜单 - 奢侈品回收测评
  • 技术深度解析:Win11Debloat如何实现Windows系统优化与隐私保护架构

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号