浏览器处理Base64数据的速度有多快?深入解析与基准测试

本文深入探讨了现代浏览器对Base64编码和解码的性能表现,通过实际基准测试对比了Safari、Chrome、Firefox等主流浏览器在处理二进制数据时的速度差异,并解释了性能差距背后的技术原因,揭示了这些速度远超普通磁盘与网络连接的惊人事实。

Base64是一种二进制到文本的编码方案,它将任意二进制数据(如图像、文件或任何字节序列)使用64个字符的字母表(A-Z、a-z、0-9、+、/)转换为安全的、可打印的ASCII字符串。浏览器在JavaScript中使用它,以便在代码或HTML中直接嵌入二进制数据,或以文本形式传输二进制数据。

浏览器最近添加了方便且安全的函数来处理base64:Uint8Array.toBase64()Uint8Array.fromBase64()。尽管它们有几个参数,但归结起来就是一个编码函数和一个解码函数。

1
2
const b64 = Base64.toBase64(bytes);      // 字符串
const recovered = Base64.fromBase64(b64); // Uint8Array

编码时,它从输入中取出24位。这24位被分成四个6位的段,每个6位的值(范围0到63)被映射到Base64字母表中的一个特定字符:前26个字符是大写字母A-Z,接着26个是小写字母a-z,然后是数字0-9,最后是作为第62和第63个字符的+和/。当输入长度不是3字节的倍数时,使用等号=作为填充。

它们的速度能有多快?

假设每个CPU周期消耗3个字节并产生4个字节。以4.5 GHz的频率计算,编码到base64的速度将达到13.5 GB/s。我们预期另一个方向(解码)的性能会较低。编码时,任何输入都是有效的:任何二进制数据都可以。然而,解码时,我们必须处理错误并跳过空格。

我编写了一个浏览器内基准测试。你可以在你喜欢的浏览器中试试看。

我决定在我的Apple M4处理器上试试,看看各种浏览器有多快。我使用64 KB的数据块。速度是相对于二进制数据来测量的。

浏览器 编码速度 解码速度
Safari 17 GB/s 9.4 GB/s
SigmaOS 17 GB/s 9.4 GB/s
Chrome 19 GB/s 4.6 GB/s
Edge 19 GB/s 4.6 GB/s
Brave 19 GB/s 4.6 GB/s
Servo 0.34 GB/s 0.40 GB/s
Firefox 0.34 GB/s 0.40 GB/s

Safari的编码速度似乎比基于Chromium的浏览器(Chrome、Edge、Brave)稍慢一些,但其解码速度大约是后者的两倍。Servo和Firefox性能相似且较差,出乎意料的是解码速度比编码速度更快。我本可以尝试其他浏览器,但大多数似乎是Chromium或WebKit的衍生品。

作为背景参考,一台好的笔记本电脑的磁盘可以持续超过3 GB/s的读写速度。一些高端笔记本电脑的磁盘速度超过5 GB/s。理论上,你的Wi-Fi连接在使用Wi-Fi 7时可能接近5 GB/s。一些互联网服务提供商可能接近提供类似的网络速度,尽管你的互联网连接很可能要慢好几倍。

大多数浏览器的处理速度可能比你天真的猜测要快。它们比网络或磁盘更快。

注意:基于Chromium的浏览器上较慢的解码速度似乎取决于V8 JavaScript引擎,它首先将字符串解码到一个临时缓冲区,然后才从临时缓冲区复制到最终目的地。(参见 v8/src/builtins/builtins-typed-array.cc 中的 BUILTIN(Uint8ArrayFromBase64)。)

注意:来自Mozilla的Denis Palmeiro告诉我,Firefox即将进行的更改将提高base64函数的性能。在我使用Firefox nightly的测试中,性能提升了约20%。

Daniel Lemire, “How fast can browsers process base64 data?,” in Daniel Lemire’s blog, November 29, 2025, https://lemire.me/blog/2025/11/29/how-fast-can-browsers-process-base64-data/.

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计