浏览器处理Base64数据的速度有多快?

原文:How fast can browsers process base64 data?

日期:2025年11月30

翻译:田八

来源:前端周刊

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

最近,浏览器新增了处理Base64的便捷且安全的方法,即 Uint8Array.toBase64()和 Uint8Array.fromBase64()。尽管涉及多个参数,但归根结底就是编码和解码这两个函数。

javascript 复制代码
const b64 = Uint8Array.toBase64(bytes);      // 字符串        
const recovered = Uint8Array.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.5GHz的频率下,编码成 Base64的速度将达到 13.5GB/s。我们预期反向操作(解码)的性能会低一些。编码时,任何输入都是有效的,任何二进制数据都可以。然而,解码时,我们必须处理错误并跳过空格。

我编写了一个浏览器内的基准测试程序。你可以在自己喜欢的浏览器中尝试一下。

我决定在我的苹果M4处理器上测试一下,看看不同浏览器的表现如何。我使用 64KB的数据块进行测试。速度是针对二进制数据来测量的。

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

Safari的编码速度似乎比基于 Chromium的浏览器(Chrome、Edge、Brave)稍慢,但其解码速度大约是这些浏览器的两倍。Servo和 Firefox的性能同样不佳,而且出现了意想不到的结果,即它们的解码速度比编码速度快。我本可以测试其他浏览器,但大多数浏览器似乎是 Chromium或 WebKit的衍生版本。

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

大多数浏览器的速度比你想象的要快得多。它们的速度比网络或磁盘速度还要快。

注意: 基于 Chromium的浏览器解码速度较慢,这似乎与 v8 JavaScript引擎有关,该引擎会先将字符串解码到一个临时缓冲区,然后再从临时缓冲区复制到最终目标位置。(参见v8/src/builtins/builtins-typed-array.cc中的BUILTIN(Uint8ArrayFromBase64)。)

注: Mozilla的 Denis Palmeiro告诉我,Firefox即将进行的更新将加快Base64函数的性能。我在 Firefox nightly 版本中测试发现,性能提高了约 20%。

相关推荐
LuHang11 小时前
Vue3 大屏项目 MQTT 实战:机场与无人机 OSD 实时数据总线
前端
2401_8858850411 小时前
芬兰语音通知接口怎样对接?语音提醒接入流程
android·前端·python·php·语音识别
铁皮饭盒11 小时前
这6个小模型各有绝活, 且都可cpu/浏览器端运行
前端·后端
徐小夕11 小时前
JitKnow AI知识库 4.7 发布|多文档推理+拖拽 Agent + 技能库,打造更懂业务的 AI 知识中台
前端·vue.js·github
小poop12 小时前
从“雷峰塔”到“对象”:JavaScript基础语法入门指南
前端·javascript
ReStock活库12 小时前
Zephyr异步SPI调用返回后,为什么不能立即复用发送缓冲区?
java·前端·网络
计算机魔术师12 小时前
半年营收163亿,算力债却到7800亿,这账谁算得清
前端
chunyublog13 小时前
HDFS 上传文件名空格问题排障教程
前端·javascript·npm
?abc!13 小时前
(贪心)621. 任务调度器
java·前端·c#
摸鱼仙人~13 小时前
校招帮简历字段匹配架构分析报告
java·前端·架构