当前位置: 华文星空 > 知识

据报道称「浏览器内核有上千万行代码」,浏览器内核真的很复杂吗?

2020-05-02知识

路过,爪机,不贴 URL 的瞎聊。

答案是,真的很复杂。

10年前,俺们给Chrome组干活儿弄 w3 规范往实现上套的时候,就有这种吐槽了——」浏览器是天下最难实现(好/完美)的软件」

拿 chromium 来说,兼容规范什么的「真」核心代码不说了就,这个光看看知乎里,前端以前的现在的兼容性(异常性)吐糟,和相关回答就能感觉到那是一坨屎山了。

chromium 代码(算上依赖的第三方库和test case)拉回来20G+ (上次弄的好像是23G来着),编译个 debug 版……,变成占 80G 空间……

这里就光说说,周边代码里,俺试图弄个代理URL重设的CDP接口,已经卡了好几周了。

为啥呢,因为跨了 content\render\network service 这几个进程模型,IPC 又是 mojom 封装的,gn 时候 自动生成的代码,调用关系类关系动不动看实现代码的时候就断了。然后 cdp 的调用也是类似 pdl 声明,自动生成中间调用,一条 cdp 方法发出来,是落render 还是 content。还是先落 render 再 mojom 到。centent 就够刚接触的人喝一尿壶的。

到 proxy 层,一边跟 profile (没现查代码记不太清了)连着,一边跟 requestcontext 连着,mode/pac/system/direct 不说,生改貌似还不行,因为两边都没 change 出来,不生效。

而且吧,这proxy 还不带 auth,认证是其他类控制,还会进 auth cache,也不是随便改改就能行的。

更麻烦的是,还不支持 socks5 auth,实现代码里写死了用非认证模式。要想支持,先得改了它的状态机,起码加4个状态吧。然后还得想办法弄到 auth 相关类里。看这类是 http 下的,不管socks 啥事儿……

光是改设个代理,还没牵扯到具体代理底层实现,就这么乱七八糟的一坨了,累不累。

对了,想在 cs.chromium.org 上跟代码,还得最好拉他最新版本的,要不这帮人成天改,要是本地版本低那么两三个version……能连类名能都不一样,本地找对应文件是 not found…… 要死了……这得多少bug或者设计不合理要这么改啊…… 弄的我这基本间隔2-3个ver 更新一下的连patch都留不住……打上一准出毛病(>_<)