我怎么知道在大小(千字节,兆字节)方面通过线路传输了多少数据?
举个例子
{
'a': 1,
'b': 2
}
Run Code Online (Sandbox Code Playgroud)
我如何知道此有效负载的大小是多少,而不是对象中的长度或项目
UPDATE
content-encoding:gzip
content-type:application/json
Transfer-Encoding:chunked
vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
dav*_*low 45
实际问题的答案应包括在标头上花费的字节数,并应包括考虑 gzip 压缩,但我将忽略这些内容。
你有几个选择。它们在运行时都输出相同的答案:
如果使用浏览器或节点(非 IE)
const size = new TextEncoder().encode(JSON.stringify(obj)).length
const kiloBytes = size / 1024;
const megaBytes = kiloBytes / 1024;
Run Code Online (Sandbox Code Playgroud)
如果你需要它在 IE 上工作,你可以使用pollyfill
如果使用节点
const size = Buffer.byteLength(JSON.stringify(obj))
Run Code Online (Sandbox Code Playgroud)
(与 相同Buffer.byteLength(JSON.stringify(obj), "utf8"))。
适用于 IE、现代浏览器和 Node 的快捷方式
const size = encodeURI(JSON.stringify(obj)).split(/%..|./).length - 1;
Run Code Online (Sandbox Code Playgroud)
最后一个解决方案几乎适用于所有情况,但URIError: URI malformed如果您向它提供包含不应存在的字符串的输入,最后一个解决方案将引发异常,例如let obj = { partOfAnEmoji: ""[1] }. 我提供的另外两个解决方案不会有这个弱点。
(积分:第一个解决方案的积分在这里。第二个解决方案的积分归功于utf8-byte-length包(这很好,你可以使用它来代替)。最后一个解决方案的大部分功劳都在这里,但是我简化了一点。我发现utf8-byte-length包的测试套件在研究这个时非常有用。)
Bil*_*oon 15
对于ascii,如果你这样做,你可以计算字符...
JSON.stringify({
'a': 1,
'b': 2
}).length
Run Code Online (Sandbox Code Playgroud)
如果你也有特殊字符,你可以通过一个函数来计算UTF-8字符的长度......
function lengthInUtf8Bytes(str) {
// Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence.
var m = encodeURIComponent(str).match(/%[89ABab]/g);
return str.length + (m ? m.length : 0);
}
Run Code Online (Sandbox Code Playgroud)
应该准确......
var myJson = JSON.stringify({
'a': 1,
'b': 2,
'c': 'Máybë itß nºt that sîmple, though.'
})
// simply measuring character length of string is not enough...
console.log("Inaccurate for non ascii chars: "+myJson.length)
// pass it through UTF-8 length function...
console.log("Accurate for non ascii chars: "+ lengthInUtf8Bytes(myJson))
/* Should echo...
Inaccurate for non ascii chars: 54
Accurate for non ascii chars: 59
*/
Run Code Online (Sandbox Code Playgroud)
Har*_*Das 11
这是完成工作的功能。
function memorySizeOf(obj) {
var bytes = 0;
function sizeOf(obj) {
if(obj !== null && obj !== undefined) {
switch(typeof obj) {
case 'number':
bytes += 8;
break;
case 'string':
bytes += obj.length * 2;
break;
case 'boolean':
bytes += 4;
break;
case 'object':
var objClass = Object.prototype.toString.call(obj).slice(8, -1);
if(objClass === 'Object' || objClass === 'Array') {
for(var key in obj) {
if(!obj.hasOwnProperty(key)) continue;
sizeOf(obj[key]);
}
} else bytes += obj.toString().length * 2;
break;
}
}
return bytes;
};
function formatByteSize(bytes) {
if(bytes < 1024) return bytes + " bytes";
else if(bytes < 1048576) return(bytes / 1024).toFixed(3) + " KiB";
else if(bytes < 1073741824) return(bytes / 1048576).toFixed(3) + " MiB";
else return(bytes / 1073741824).toFixed(3) + " GiB";
};
return formatByteSize(sizeOf(obj));
};
console.log(memorySizeOf({"name": "john"}));Run Code Online (Sandbox Code Playgroud)
我从以下网址获得了摘录
| 归档时间: |
|
| 查看次数: |
31108 次 |
| 最近记录: |