关键词: 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 的文档,预览一下,大致有这些:
-
ClangC、C++一类的编译器
-
GPU-related docsGPU相关
-
Misc Linux-Specific DocsLinux 平台部分的
-
Misc MacOS-Specific DocsMacOS 平台部分
-
Misc Windows-Specific Docs Windows 平台部分
-
Misc Android-Specific DocsAndroid 平台部分
-
Misc iOS-Specific DocsIOS 平台部分
-
Misc Chrome-OS-Specific DocsChrome OS 系统部分
-
Media对多媒体的支持
-
Accessibility可访问性方面的能力
-
Memory 内存管理部分
-
Memory Infrastructure Timeline Profiling (MemoryInfra)一个基于时间线的评测系统
-
Mojo & Services 提供基础的跨进程/线程函数调用API
-
Speed性能相关
主流浏览器与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呢,我想大概是难度高。像操作系统一样的难度让大家望而却步,都选择用同一个开源版本只做上层修改。
另,放几张官方文档上的架构图假装文章有深度:
多进程架构图
参考
关于手机webview内核、默认浏览器、各家小程序的渲染层浏览器的区别和兼容性 - DCloud问答
Google Chromium 为什么要从 WebKit 中抽离,新建一个 Blink 分支?对 Chrome 有什么影响?