filereader.readasarraybuffer() 更适合大 html 文件,因其避免字符串解码导致的内存翻倍和主线程阻塞,而 readastext() 会使 20mb 文件堆内存飙升至 1.2gb 并卡顿超 5 秒。

为什么 FileReader.readAsArrayBuffer() 比 readAsText() 更适合大 HTML 文件
因为 readAsText() 会强制解码成字符串,对几 MB 的 HTML 来说:内存占用翻倍(UTF-8 → JS string)、解析器还得再 tokenize;而 readAsArrayBuffer() 直接移交二进制,主线程只做轻量切分,Worker 才负责解码和解析。
常见错误现象:用 readAsText() 解析 20MB HTML,Chrome 堆内存瞬间飙到 1.2GB,页面无响应超过 5 秒。
- 必须提前检测编码:读取前 1024 字节,用
TextDecoder尝试 UTF-8 / GBK / ISO-8859-1,避免 Worker 内反复重试 - 不要在主线程调
new TextDecoder().decode(buffer)—— 这一步交给 Worker,否则又卡主线程 - 若 HTML 含
<meta charset="gbk">锛屼富绾跨▼闇
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











