
Base64 是一种二进制到文本的编码方案,它将任意二进制数据(例如图像、文件或任何字节序列)转换为安全、可打印的 ASCII 字符串,该字符串使用 64 个字符的字母表(A–Z、a–z、0–9、+、/)。浏览器在 JavaScript 中使用 Base64,可以将二进制数据直接嵌入到代码或 HTML 中,也可以将二进制数据作为文本传输。
浏览器最近新增了便捷安全的函数来处理 Base64 编码的Uint8Array.toBase64()和Uint8Array.fromBase64()函数。虽然它们有多个参数,但本质上都是编码和解码函数。
const b64 = Base64.toBase64 ( bytes ) ; //字符串 const recovered = Base64.fromBase64 ( b64 ) ; // Uint8Array
编码时,它从输入中提取 24 位。这 24 位被分成四个 6 位段,每个 6 位值(范围从 0 到 63)映射到 Base64 字母表中的一个特定字符:前 26 个字符是大写字母 AZ,接下来的 26 个字符是小写字母 az,然后是数字 0 到 9,最后是加号 (+) 和斜杠 (/),分别对应第 62 个和第 63 个字符。当输入长度不是 3 字节的倍数时,使用等号 (=) 进行填充。
它们的速度能有多快?
假设每个 CPU 周期消耗 3 字节数据并生成 4 字节数据。在 4.5 GHz 的 CPU 频率下,Base64 编码速度可达 13.5 GB/s。反向解码时,性能预计会降低。编码时,任何输入都是有效的:任何二进制数据都可以。但是,解码时,我们必须处理错误并跳过空格。
我编写了一个浏览器内基准测试程序。您可以在您喜欢的浏览器中试用一下。
我决定在我的苹果 M4 处理器上测试一下,看看各种浏览器的速度如何。我使用 64 KiB 的数据块。速度是相对于二进制数据测量的。
| 浏览器 | 编码速度 | 解码速度 |
|---|---|---|
| 狩猎之旅 | 17 GB/s | 9.4 GB/s |
| SigmaOS | 17 GB/s | 9.4 GB/s |
| 铬合金 | 19 GB/s | 4.6 GB/s |
| 边缘 | 19 GB/s | 4.6 GB/s |
| 勇敢的 | 19 GB/s | 4.6 GB/s |
| 伺服电机 | 0.34 GB/s | 0.40 GB/秒 |
| 火狐浏览器 | 0.34 GB/s | 0.40 GB/秒 |
Safari 的编码速度似乎比 Chromium 内核的浏览器(Chrome、Edge、Brave)略慢,但解码速度却快了近一倍。Servo 和 Firefox 的性能也同样糟糕,但出乎意料的是,它们的解码速度却比编码速度快。我本可以尝试其他浏览器,但它们大多似乎都是基于 Chromium 或 WebKit 内核的。
作为参考,一台性能良好的笔记本电脑的硬盘读写速度可以超过 3 GB/s。一些高端笔记本电脑的硬盘速度甚至超过 5 GB/s。在理想情况下,你的 Wi-Fi 连接速度可能接近 5 GB/s。一些互联网服务提供商或许能提供类似的网速,但你的实际网速可能要慢好几倍。
大多数浏览器的加载速度比你想象的要快得多。它们比网络或磁盘的加载速度还要快。
原文: https://lemire.me/blog/2025/11/29/how-fast-can-browsers-process-base64-data/