从头创建一个新的浏览器,这合理吗?

news2025/6/21 15:17:34

从头构建一个新浏览器?这如果是不是个天大的“伪需求”,便是一场开发者的噩梦!
要知道,如果没有上百亿的资金和数百名研发工程师的投入,从头开始构建一个新的浏览器引擎,几乎是不可能的。然而SerenityOS系统的作者Andreas Kling却带领着一支仅有数十人且几乎没有资金支持的开源项目小队仅花两个月便完成了这项任务——从0到1构建了一款跨平台Web浏览器Ladybird(瓢虫)。截至目前,瓢虫已实现了在Linux、macOS、Windows(WSL)和Android等系统上运行。本文就带领大家一探此事的究竟。

一、“轮子之王”两个月实现小目标

起初,Andreas希望将瓢虫作为 SerenityOS 系统的“LibWeb”浏览器引擎,随后Andreas Kling为其构建了一个简单的GUI。随着瓢虫项目的不断完善,在启动仅两个月后,它已经成为一个跨平台的Web浏览器。

在此之前,Andreas Kling曾有过Qt和WebKit项目的开发经验,而除了Qt,整个Ladybird浏览器的组件(包括LibWeb和LibJS等渲染组件)几乎全是Andreas Kling一手打造的,这也使其在圈内拥有了“轮子之王”的绰号。
在这里插入图片描述
在完成这项难以置信的壮举后,Andreas Kling收到了不少来自圈内朋友的赞誉和提问,而其中重复度最高的一个问题便是:“你的团队为何能在构建瓢虫浏览器方面取得如此快速的进展,这从表明看起来是完全不可能的。”

二、也许不能复制的五个秘诀

近期,Andreas Kling也正式通过一篇博客回应了这个问题,并将这次成功归结为了五个方面。

1.更强的网页规范

在启动Ladybird项目前,我们已经在HTML4和CSS2.1的模糊时代走了很长一段路。今天的ECMAScript、HTML和CSS规范(在大多数情况下)都拥有一流的技术文档,与过去相比,它们的算法可以用更少的工作和测试来实现。

瓢虫在体系结构层面会尽可能地匹配在各种网络规范中所描述的体系结构。这使得新加入项目的开发人员更容易适应,因为他们在参与开发前只需要学习一种架构而不是几种。

然而尽管如此,这与理想情况仍然存在差距,一些较为独特且不常见的特性给研发工作带来了一定困难。但值得庆幸的是,W3C有一个活跃的编辑社区致力于改善这些问题。我们在Ladybird上所做的大量工作包括使我们的代码库都能够适应这些规范编辑器所进行的更新。

我们也在努力改进规范:瓢虫的开发人员经常会报告规范错误,有时甚至还会提交pr来直接改进规范。但归根结底,在一个全新的浏览器引擎中实现一个规范,可以很好地验证该规范的完整性及可靠性。
在这里插入图片描述

2.专注于垂直领域

虽然今天的网页规范确实比以往任何时候都好,但许多特性仍然跨越多个规范,通常在子系统之间有细微的交互,实现者必须理解这些交互。如果开发人员试图一次只构建一个规范的浏览器,甚至一次只构建一个特性,那么其很可能会失去动力并因繁杂的工作而失去兴趣。

因此,我们倾向于专注于构建功能的“垂直切片”。这意味着需要设定实际的、交叉的目标,比如“让我们加载twitter.com/awesomekling”,“让我们登录discord.com”,以及其他类似的目标。在垂直切片上工作有助于保持开发者的动力,随着网站的进步,每一位参与者都能看到实际的变化,这会给大家带来极大的动力。

这种方法在一定程度上是可行的,因为web本身是围绕优雅降级设计的,这意味着浏览器可以呈现web内容,同时只支持站点使用的一些功能。你可能认为这种方法会产生一个“兼容网站”的小集合和一大堆无法运作的代码,但实际情况是水涨船高的,当我们专注于改进一个网站时,成千上万的其他网站也会得到改进。

3.后置性能优化

我们目前并没有花太多精力优化瓢虫的性能。相反,我们的主要关注点是解决与正确性和兼容性相关的问题。这种方法能帮助我们在深入优化之前专注于确保浏览器按预期工作。当然这并不是说我们不关心浏览器性能。我们希望瓢虫浏览器最终能够实现快速响应。

这是一个遵循一定规律的选择,不要花太多时间优化一个还不能正常工作的产品。例如,虽然我们几乎可以确定将会优化JavaScript执行或渲染速度的区域,但我们会有意识地选择优先修复渲染错误或与流行网站的兼容性问题。

但有时我们也确实会为慢得难以忍受的事情破例。毕竟对于一个开源项目而言,我们不想让开发者的贡献过程变得不愉快。在遇到这种情况时,我们会花一定时间解决最重要的性能瓶颈,以保持相对良好的开发体验。但在这个阶段,我们并没有跟踪基准分数之类的东西。不过,一旦我们在正确性和兼容性方面取得了坚实的基础,那么下一步要做的便是优化性能。

4.强大的团队文化

在Ladybird开发团队一起工作的时间里,我们形成了强大的团队文化。这里的文化是高度乐观的,每个人都抱有“我能行”的态度。虽然由于采取开源协作的工作模式,Ladybird团队分布在世界各地,但我们都会在Discord上见面聊天,互相激励。团队中的开发人员也经常合作,参与彼此的项目。每个在Ladybird团队中工作的人都被鼓励在项目中探索自己的个人兴趣而不是被指定任务。团队中的大多数人在加入我们之前都从未接触过浏览器代码,但在加入项目后,他们会迅速成为世界级的浏览器开发人员,这也使得每一个项目的参与者能够收获足够的获得感。此外,由于瓢虫是SerenityOS项目的一个分支,它具有与SerenityOS同样的责任感和自力更生的文化。我们在开发瓢虫浏览器时几乎避免了所有的第三方依赖,由开发人员自己构建一切。这样做的一部分原因是由于从0开始是一件很有趣的事情,此外也正因如此,这种开发模式为我们的软件创建了全面的责任制,每个人都会尽力对自己所写的代码负责,在出现问题时也能更快的进行响应,而无需等待第三方的反馈。5.拥有一位经验丰富的领导在比较复杂的项目中,一位经验丰富的领导可以发挥重要作用。我曾有机会在产品浏览器领域工作多年(在苹果和诺基亚),这让我对浏览器的构建以及各组件的组成方面有着比较深刻的理解。当没有这方面经验的开发者看到需要组合一个浏览器的大量技术和规范时,可能会感到不知所措,但我能够清楚地知道如何将它们合理的组合在一起并使其工作。在瓢虫浏览器的开发过程中,参与其中的开发者不需要过多考虑自己的想法或所写的代码是否可行,而是可以直接在与团队进行简单沟通后便开始工作,这会为整个项目省了大量时间,参与者也不会因为过多的意见分歧而产生不良情绪。在更实际的情况下,我真正负责的工作通常是在各组件的链接与交互之间-浏览器的部分没有严格指定(例如布局和渲染)。对于缺乏经验的浏览器开发人员来说,他们可以更专注自己所擅长的领域而不必过多担心其他问题。

三、关于再造浏览器:杠精之间的讨论

既然有了Chrome、Firefox浏览器,为什么还要再造一个呢?这当然不是个好主意。在这里插入图片描述
一位Reddit用户对于之所以会出现“再造浏览器”的情况,是因为历史上所有的浏览器都构建了自己的“怪癖”库,或者超出了标准范围的功能,或者干脆不符合标准。他还举例说:IE、Chromium、Safari一直都是“越界”来满足用户的需求,并期待自己的实现版本能成为标准。这位用户还吐槽:Safari是唯一一个给我带来真正麻烦的浏览器。
简言之,用户所期望的域浏览器的标准本身就存在差距。即便再造一个,也可能只会是制造适用于某些站点的浏览器。因为有的网站只支持Chrome。很多用户在遇到类似的情况下只能选择它,而放弃Firefox。
在这里插入图片描述
有网友进一步分析,这个浏览器跟Chrome相比,是不需要完美的像素渲染的。并指出“如果排名前100的网站能在其上正常运行,那这个项目才是成功的”。
有网友反驳道:这个浏览器是为开发人员自己准备的,不应吹毛求疵。

四、写在最后

虽然时至今日,Ladybird浏览器中的部分功能依然存在一些错误,甚至一些功能还需要很长时间才能真正投入日常使用。但目前这只小瓢虫已经震动双翅飞向了天空。Ladybird 的出现,增加了浏览器和浏览器引擎的多样性,不少开发者也表示了对项目的赞许:“这是一项令人难以置信的艰巨任务,虽然一个小型的非商业项目不太可提供一个可行的替代浏览器平台。但这只小瓢虫成功击碎了‘不可能’的标签。”对此,Andreas Kling也表示:我们依然在努力让Ladybird变得更好、更快,我们会持续关注关注Ladybird各类功能的正确性和功能支持,并对整体新能进行优化。在博客末尾,Andreas Kling提到:尽管我不确定我们的工作方式可以直接转移到其他软件项目上(除非它们也是浏览器)并给其他团队带来帮助,但是通过一个由聪明、专注的个人组成的小团队和一个知识渊博的领导者来指导他们,你可以尝试构建任何你想要的软件。你当然可以做到,即使没有数十亿美元和数百名员工,没必要听取那些从未开发过浏览器的失败主义者的纸上谈兵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI风暴 :文心一言 VS GPT-4

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 文心一言 VS GPT-4 文心一言:知识增强大语言模型百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动&#…

代码随想录Day49

今天继续学习动规解决完全背包问题。 322.零钱兑换 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,…

虹科分享 | 使用IOTA检查受3CX DLL旁加载攻击影响的客户端 | 网络性能监控

2023年3月底,VoIP制造商3CX(流行的互联网语音协议(VoIP)专用交换机(PBX)电话系统的开发商)遭到DLL旁加载攻击。他们的软件被大约60万家公司和1200万用户使用,其中包括梅赛德斯-奔驰、…

人工智能中的监督学习到底是啥?其应用方向有哪些?

人工智能(Artificial Intelligence, AI)是一门致力于使机器能够像人类一样进行智能决策和行为的学科。监督学习(Supervised Learning)是人工智能领域中的一种重要学习方式,通过使用标注好的样本数据来训练模型&#xf…

零基础如何入门网络安全?【2023最新】

前言 最近收到不少关注朋友的私信和留言,大多数都是零基础小友入门网络安全,需要相关资源学习。其实看过的铁粉都知道,之前的文里是有过推荐过的。新来的小友可能不太清楚,这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

Linux 操作系统原理 — 内核协议栈收包/发包流程

目录 文章目录目录关键技术NIC DMAKernel 中的 sk_buff 与 sk_bufferKernel 中的 Rx/Tx RingBuffer Descriptor Table中断收包机制NAPI 收包机制多队列网卡内核协议栈收包/发包流程概览内核协议栈收包流程详解驱动程序层(数据链路层)VLAN 协议族Linux Br…

基于MATLAB的语音识别仿真系统

本文实现的语音识别系统,主要是对语音识别的特征参数的提取和识别模型的匹配,进行深入的研究。首先,对语音识别进行了概述,给出了语音识别的系统框架。然后就是如何实现语音识别的问题,这个过程可分为两个部分:第一个是语音特征参…

【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制

前两天考完蓝桥杯稍微休息了一下,昨天做了一个动画控制,但是想到写出来可能会字很多,我就搁置到今天来写了,unity learn是一个官方教程平台,里面有unity assert store的配套教程,全是文档,比看视…

#java mavn安装图像验证码jar失败kaptcha-2.3.2.jar#

场景:在登录的时候添添加图形验证码功能,使用 com.google.code.kaptcha开发图像验证码,。通过pom引入依赖一直红色提示,找打不到依赖,如图所示 原因:kaptcha-2.3.jar 没有放在mavan的中央仓库 解决方案,需…

Hive笔记

目录 第3章 Hive数据类型 第 4 章 DDL 数据定义 第5章DML数据操作 第6章 查询&#xff08;语法与MySQL一样&#xff09; 第 7 章 分区表和分桶表 第 8 章 函数 第3章 Hive数据类型 如array<map<string,int>> 集合数据类型工作中不是很常用&#xff0c;最常用…

Web 攻防之业务安全:Response状态值修改测试(修改验证码返回值 绕过限制.)

Web 攻防之业务安全&#xff1a;Response状态值修改测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务…

2.17、多生产者-多消费者进程

桌子上有一只盘子&#xff0c;每次只能向其中放入一个水果。爸爸专向盘子中放苹果&#xff0c;妈妈专向盘子中放橘子&#xff0c;儿子专等着吃盘子中的橘子&#xff0c;女儿专等着吃盘子中的苹果。只有盘子空时&#xff0c;爸爸或妈妈才可向盘子中放一个水果。仅当盘子中有自己…

Linux系统应用编程(四)Linux多线程

本篇文章主要内容&#xff1a;Linux系统应用编程&#xff08;四&#xff09;Linux多线程一、线程和进程的区别二、Linux多线程1.线程的使用 - 创建、退出、等待2.线程的同步 - 互斥量&#xff08;1&#xff09;互斥量的理解&#xff08;略&#xff09;&#xff08;2&#xff09…

你真的会自动化测试?自动化测试技术选型抉择

自动化测试框架 在学习自动化测试或者实践自动化测试时&#xff0c;我们一定会对一个名词不陌生&#xff0c;那就是“自动化测试框架”&#xff0c;而有些人也将Selenium、Appium这样的工具也称之为“自动化测试框架”&#xff0c;那么到底自动化测试框架如何理解呢&#xff1…

多种文字翻译软件-翻译常用软件

整篇文档翻译软件 整篇文档翻译软件是一种实现全文翻译的自动翻译工具&#xff0c;它能够快速、准确地将整篇文档的内容翻译成目标语言。与单词、句子翻译不同&#xff0c;整篇文档翻译软件不仅需要具备准确的语言识别和翻译技术&#xff0c;还需要考虑上下文语境和文档格式等多…

【Linux】一文带你探究网络世界的基石

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;计算机网络…

JVM专题

JVM类加载 Java里有如下几种类加载器&#xff1a; 引导类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的核心类库&#xff0c;比如 rt.jar、charsets.jar等 扩展类加载器&#xff1a;负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包应用程序…

一篇文章让你搞懂TypeScript中的??和?:和?.和!.是什么意思

TypeScript中的??和?:和?.和!.是什么意思&#xff1f;知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货???:?.!.知识回调&#xff08;不懂就看这儿&#xff01;&#xff09; 知识专栏专栏链接TypeScript知识专栏https://blog.csdn.net/xsl_…

私有化部署GPT,告别网络困扰

最近的GPT是热火朝天&#xff0c;基本人手一个。工具用的好&#xff0c;工作5分钟&#xff0c;划水一整天。 不过最近Chat的访问越来越限制了&#xff0c;访问官网都有网络的问题&#xff0c;今天给大家介绍一个方案&#xff0c;私人独享属于自己的chat&#xff0c;不再担心想…

sdx12使能bluetooth

最后的效果&#xff1a; 1.驱动使能 apps_proc/kernel/msm-5.4/arch/arm/configs/vendor/sdxnightjar.config #add bt driver CONFIG_BTy CONFIG_MSM_BT_POWERy使用的芯片是sdx12 QCA6174A-1 管脚配置如下&#xff08;如果管脚不同&#xff0c;需要修改对应的dts&#xff09…