浏览器内核概述

1,010 阅读4分钟

关键词: webkit、blink、chromium、WKwebview、 浏览器引擎、chrome 、KHTML 、小程序渲染

概要

本文对浏览器内核的技术路线做了简单梳理

介绍了一下Android webview\ IOS WKwebkit \ chrome \ 小程序 这些常见的浏览器形态

浏览器架构图

Chromium的主要模块

浏览器引擎 (Browser engine)

或者叫排版引擎 或 渲染引擎,可以看做浏览器最重要的内容: 把HTML文档以及其他web资源在一个可交互的屏幕上展示出来。

单就浏览器引擎来说,它的历史是这样的:

我们常听到的 WebKit 是基于KTML分支开发而来的,而Blink又是从 WebKit 的一个分支上演变而来。WebKit 是苹果家在支持,Blink 是谷歌家在支持,分叉的原因是 谷歌家搞了多进程支持但不愿意合并入主分支,并且谷歌家乐于实现草案阶段的新标准,道不同也就分家了。

JS 引擎(JavaScript engine)

一种叫 V8的引擎

JS 引擎是用来执行 JavaScript 代码的,一开始只是作为解释器的存在,后来加入即时编译的技术,提高了效率。

主要使用场景做为浏览器的一部分,现在也在 node.js \ Deno 服务端环境下。当然现在在沙盒环境下可以运行 WebAssembly。

目前市面上主流的就两种:

V8 谷歌家,基于 Chromium 的都是这个,主流中的主流

 JavaScriptCore 苹果家,基于WebKit类的

Chromium

金属"铬"

作为一个一面用户的产品,浏览器集成了 上面的浏览器引擎 和 JS引擎,还有些其他功能,比如:书签、历史栈、插件能力、安全相关等等,Chromium 是其中最流行的开源实现。

Chromium Docs浏览了下Chromium 的文档,预览一下,大致有这些:

主流浏览器与Chromium

PC上的我们常用的Chrome和Chromium的关系大概就,Chrome 集成了一堆自己的标志,比如图标啊、账户服务等,市面上多数的浏览器都是这样,Edge也在不久前变成了基于Chromium 了。

移动浏览器,我们常见的也都是基于Chromium, QQ、360、UC、百度等。虽然腾讯有宣称的 X5,但是看它的架构组成以及代码结构,应该也是从Chromium的某个分支clone了。

在IOS手机上,现在主流的是WKwebview,苹果系统自带,在APP开发内嵌的webview 就是这个。苹果的封闭生态,这个不好变更。

安卓手机系统自带的webview是基于Chromium的,可以作为一个独立的模块来更新,各个APP只需引入系统的webview就可以加载H5,只是可能有一些手机系统把webview优化坏了,不太能独立更新。各位可以在【设置】里搜索webview看看。

如果APP自己引入了一个浏览器(50M左右的大小还是很可观的包体积),那八成就是要搞小程序,目前安卓平台下微信、抖音、百度等平台都有引入不同版本的Chromium 各自开发。基于某个版本的,不会轻易随社区升级,所以兼容性还是需要注意的。

罗列如下:

  • 微信:老版微信使用的是x5,ua特征字符串有Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044903;后来微信团队自研了MWEB内核,ua特征字符串有Chrome/67.0.3396.87 XWEB/882 MMWEBSDK/190506

  • 百度小程序:ua特征是Chrome/63.0.3239.83,并且包含baiduboxapp字符串

  • 支付宝小程序:根据支付宝版本,chrome有57和69等版本,ua特征字符串有NebulaSDK

  • QQ小程序:根据QQ版本,chrome有66和68等版本,ua特征字符串有QQ/MiniApp

  • 头条小程序:ua特征是Chrome/62,ua特征字符串有ToutiaoMicroApp

为啥这么多浏览器都基于Chromium呢,我想大概是难度高。像操作系统一样的难度让大家望而却步,都选择用同一个开源版本只做上层修改。

另,放几张官方文档上的架构图假装文章有深度:

渲染过程

多进程架构图

参考

Chromium 文档

关于手机webview内核、默认浏览器、各家小程序的渲染层浏览器的区别和兼容性 - DCloud问答

历史在重演:从KHTML到WebKit,再到Blink

Google Chromium 为什么要从 WebKit 中抽离,新建一个 Blink 分支?对 Chrome 有什么影响?