Chrome 开发工具的 "show more" 显示不正确的大小
Chrome dev tools's "show more" shows incorrect size
我有一个创建大字符串的非常简单的脚本
window.big = '';
for(let c = 0; c < 12000; c++){
window.big += 'L'
}
当我尝试 console.log
时,事情变得很奇怪。
window.big.length
是 12000,但是,当我尝试在 Chrome Dev Tools 中执行 console.log(window.big)
时,它显示 Show more (23.4 KB)
,是原始大小的两倍多,这是 12000。
String.length
与字符的字节大小相比可能有所不同,但是,当您尝试这样做时,事情会变得有趣
var blob = new Blob([window.big], {type: 'application/octet-stream'});
window.open(window.URL.createObjectURL(blob));
显示大小为 12KB
在 Chrome OS、Chrome 版本 80.0.3987.162(官方构建)(64 位)
上复制了该问题
Chrome devtools 始终显示内部字符串的大小,该字符串按照 JavaScript 规范以 UTF-16 编码存储,因此每个字符占用两个字节。当您创建 Blob
时,它会将字符串存储为 UTF-8,其中 ASCII 字符(例如 L
)仅占用一个字节。
已在 Chrome 83 中修复(参见 crbug.com/1024721)。现在 Chrome 使用 UTF-8 编码计算字符串的字节大小,因为它在网络中很普遍,所以现在 devtools 显示 12 kB 供您测试。
我有一个创建大字符串的非常简单的脚本
window.big = '';
for(let c = 0; c < 12000; c++){
window.big += 'L'
}
当我尝试 console.log
时,事情变得很奇怪。
window.big.length
是 12000,但是,当我尝试在 Chrome Dev Tools 中执行 console.log(window.big)
时,它显示 Show more (23.4 KB)
,是原始大小的两倍多,这是 12000。
String.length
与字符的字节大小相比可能有所不同,但是,当您尝试这样做时,事情会变得有趣
var blob = new Blob([window.big], {type: 'application/octet-stream'});
window.open(window.URL.createObjectURL(blob));
显示大小为 12KB
在 Chrome OS、Chrome 版本 80.0.3987.162(官方构建)(64 位)
上复制了该问题Chrome devtools 始终显示内部字符串的大小,该字符串按照 JavaScript 规范以 UTF-16 编码存储,因此每个字符占用两个字节。当您创建 Blob
时,它会将字符串存储为 UTF-8,其中 ASCII 字符(例如 L
)仅占用一个字节。
已在 Chrome 83 中修复(参见 crbug.com/1024721)。现在 Chrome 使用 UTF-8 编码计算字符串的字节大小,因为它在网络中很普遍,所以现在 devtools 显示 12 kB 供您测试。