在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

如何开发一款浏览器

  • 2013-02-13
  • 本文字数:1992 字

    阅读完需:约 7 分钟

作为互联网时代用户日常使用最为频繁的一种产品,浏览器领域一直是各大厂商的“兵家必争之地”,甚至有“得浏览器者得天下”的说法。桌面端 IE、Firefox、Chrome 的争夺一直非常激烈,最近又有腾讯、搜狗、360 等公司的加入,各自都开发出具有自身特点的浏览器。在移动端也一样,UC 浏览器、海豚浏览器、猎豹浏览器、QQ 浏览器等等都加入到这场混战之中。那么,想要开发出一款浏览器,需要有哪些知识储备,又有哪些难点呢?最近在知乎上出现了两场讨论,我们可以从中窥得一斑。

问题之一是“开发一款浏览器内核需要学习哪些方面的知识?”,这是一位准备做毕业设计的学生提出的,他“不准备直接用现成的开源浏览器内核(比如 WebKit 或者 KHTML 这些)来做套壳,而是打算自己用 C/C++ 从零开始,写一个简单的浏览器内核,也就是所谓的排版引擎或者网页渲染引擎。考虑到自己的能力,目标暂定为能够支持 html1.0”。

冬眠给出了比较详细的解答:

网页开发:你要知道 inline 与 block 有什么不同,什么是 box model,ie 是怎么实现的,标准的是怎么样的。

网络方面:浏览器会使用 URL,表单提交,下载,DNS 等一系列知识,深一些的比如说在 chrome 下面输入 chrome://dns,看看什么叫 prefetch DNS,浅一点至少要知道怎么实现表单提交,表单提交分那些格式。在网络那一层要怎么拼。

编译原理:简单的是状态机,具体的是 CSS 的解析,Javascript 的解析。其实光 HTML,CSS 的解析就够做一个毕设的了,举一个简单的例子,浏览器是边下载边解析,边显示的,这个地方就有不少的坑等着你,光拿一个开源的 xml 解析器可不行,html 的解析中还有图文混排等功能,整个地方又是无数的坑。 就不要说 javascript 的引擎了,龙书中写的只是一小部分,里面还牵涉到什么 JIT 等一大堆东西。

图形:硬件加速,你在 chrome 浏览器中地址栏中输入 chrome://gpu,里面出现频率最高的就是 Hardware accelerated。

前 UC 浏览器产品经理张瑞从浏览器的工作周期角度给出了建议:

首先是联网模块:包括域名解析(这个可以忽略)、发起请求,连接线程的管理等(单线程请忽略)。

然后是解析模块:包括了 html 的解析、DOM 树的建立等。尤其是 html 的解析,会涉及到容错方面的考虑,DOM 树要考虑各种场景下的效率(好吧,毕业设计可以不考虑效率)。

接下来是渲染模块:根据你建立的 DOM 树,按照网页所描述的内容展示字体、色块等,这个没什么好说的。

还有其他,比如网页对象的管理、页面事件的响应、插件管理。

另一个问题是“开发一款浏览器的难点有哪些?”,范围并不限于 PC 端还是移动端的浏览器。

余天升认为难点在于浏览器的两个关键部分:布局引擎和 JavaScript 解释器。

布局引擎就是我们常说的浏览器的内核,主要处理 HTML 和 CSS。简单的说,就是它决定了什么东西该在什么地方怎么样显示。对于网页这种视觉工程来说,布局引擎的重要程度不言而喻。

对于布局引擎的难点,大概有这些方面:

  1. 对标准的支持和扩展: 有一些标准的内容可能会难以实现,或者会带来一些安全的问题,所以各大浏览器对于标准都会有一些的裁剪,而另外又有一些拓展。
  2. 布局性能: 布局引擎的性能,包括内存、CPU 等指标,能够直接影响用户的体验。简单来说就是显示快不快,占用内存多不多。
  3. 其他: 类型稳定性、可拓展性这样的一些其他类型软件共有的特点。

JavaScript 解释器本来应该是浏览器内核的一部分,但是现在前端大量对 JavaScript 的应用,和浏览器厂商对这个部分的重视,开始分离出来了。既然拿出来了,JavaScript 解释器的性能,包括时间性能、内存性能这些因素就很重要了,需要各种优化编译过程,优化生成代码,优化指令的工作。

其他的一些难点,就是一些软件上通用的东西,如何挖掘用户需求,如何让用户使用得更满意,比如单窗口向多标签的转变,快速拨号,鼠标手势这些功能。

程序猎人认为问题应该分为技术难点和非技术难点:

如果是非技术难点,最大的就是人才和资金。如果找不到合适的人才,筹不到足够的资金,开发工作是否能开始都是个问题。

如果是作为商业产品开发,就随之而来另一个难点:盈利方式。现在免费浏览器满天飞,你花了钱开发了浏览器,如何与其他产品竞争,如何收回成本甚至盈利。

再看技术难点,余天升说的比较全面。但顺序上,我觉得稳定性和可靠性要更重要一些。对于几乎一切软件,这两点都是最重要的。只不过要求的标准看要定多高了。浏览器肯定不需要银行系统那么高的可靠性和稳定性。

另外,从技术上看,你是要重新开发一个渲染引擎还是利用现有引擎。如果要重新开发引擎,那么难点就会多很多。各种协议、标准的支持,自身的特性,性能都是不得不考虑的问题。

由此看来,想要开发出一款浏览器,并不是一件容易的事情,其中涉及到的各种知识和需要处理的难点都非常多,不过这么多的付出也会得到相应的回报。InfoQ 的读者们,你是否也考虑过开发一款浏览器呢,对于如何开发一款浏览器有什么样的看法呢?欢迎加入讨论。

2013-02-13 18:5427417
用户头像

发布了 340 篇内容, 共 147.3 次阅读, 收获喜欢 13 次。

关注

评论 1 条评论

发布
用户头像
开发一款新的浏览器绝非易事,核心的包括render core,js core两部分,还需要兼容目前很多的extensions,web apps以及很多的标准规范。人力方面,需要大量的优秀浏览器开发者,需要雄厚的资金支持。
2021-09-02 16:15
回复
没有更多了
发现更多内容

华为云GaussDB(for Influx)单机版上线,企业降本增效利器来了

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

MySQL 执行计划详解 | 京东物流技术团队

京东科技开发者

MySQL 数据库 explain关键字 企业号 8 月 PK 榜

企业文件外发系统必备八大要素

镭速

文件外发系统

从零开始学极狐GitLab|03 Runner 裸机部署

极狐GitLab

DevOps gitlab cicd SaaS DevSecOps

百度百舸平台的大模型训练最佳实践

Baidu AICLOUD

容错机制 大模型训练 异构计算 CheckPoint

aspera替代方案:探索这些安全且可靠的文件传输工具

镭速

aspera替代方案 文件传输工具

洛阳等级保护测评机构有哪些?在哪里?咨询电话多少?

行云管家

等保 等级保护 等保测评 洛阳

如何精准预测天气?火山引擎ByteHouse与大地量子这么做

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 8 月 PK 榜

浅谈统一权限管理服务的设计与开发

百度Geek说

百度 数据中心 企业号 8 月 PK 榜 权限服务

分布式事务的华丽进化 | 京东物流技术团队

京东科技开发者

分布式事务 数据库事务 企业号 8 月 PK 榜 柔性分布式事务

聊聊JDK1.0到JDK20的那些事儿 | 京东云技术团队

京东科技开发者

Java jdk jdk8 jdk17 企业号 8 月 PK 榜

DTCC 2023即将启幕 明天见!

酷克数据HashData

华为云API Explorer:自动化运维的得力助手

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

极狐GitLab 企业级 CI/CD 规模化落地实践指南(一)

极狐GitLab

DevOps cicd runner template Component

小灯塔系列-中小企业数字化转型系列研究——知识管理测评报告

向量智库

因为私域流量运营,App重新受重视?

FinFish

小程序生态 私域运营 小程序容器 私域流量运营 流量运营

极狐GitLab 上新:跳过无需备份项目,节约数 10 至 1000 倍时间与磁盘空间

极狐GitLab

DevOps gitlab 磁盘空间 数据备份恢复 备份时间

一文预览 | 8 月 16 日 NVIDIA 在 WAVE SUMMIT深度学习开发者大会 2023精彩亮点抢先看!

飞桨PaddlePaddle

人工智能 百度飞桨 WAVE SUMMIT

本地工具是什么意思?本地工具与远程工具一样吗?

行云管家

IT运维 远程工具 本地工具

火山引擎DataLeap的Data Catalog系统公有云实践

字节跳动数据平台

大数据 数据中台 企业号 8 月 PK 榜

CCF C³ 走进百度:大模型与可持续生态发展

飞桨PaddlePaddle

人工智能 百度飞桨 文心大模型 重磅活动

SAM适配下游任务的探究:SAM Adapter

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

GeaFlow任务能力增强:通过API定制流图计算逻辑

TuGraphAnalytics

分布式计算 java编程 API 图计算 tugraph

相约天津!全国智能汽车竞赛百度创意组总决赛通知

飞桨PaddlePaddle

百度 paddle 百度飞桨 飞桨国赛 全国大学生智能汽车竞赛

面试涨薪神奇操作,直接多给3k的JVM垃圾优化笔记

小小怪下士

Java 程序员 JVM 调优

实战:工作中对并发问题的处理 | 京东物流技术团队

京东科技开发者

数据库 并发 数据库锁 更新丢失 企业号 8 月 PK 榜

19. 第三方库的管理和虚拟环境

茶桁

Python pip conda

18. Python中的模块与包

茶桁

Python

Programming abstractions in C阅读笔记p111-p113: boilerplate

codists

断点续传的未来发展趋势与前景展望

镭速

断点续传 文件传输软件

如何开发一款浏览器_JavaScript_侯伯薇_InfoQ精选文章