减少通过网络传输的数据大小的方法?

问题描述 投票:0回答:2

有没有什么快速的方法可以减少网络传输时数据的字节数?

我将数据从服务器发送到浏览器,它占用了相当多的带宽

我的数据看起来像这样,但具有更多属性:

{
  1: {width: 10.25, height: 30.75,},
  2: {width: 7.5, height: 1.25,},
}

Json 编码

javascript object byte bandwidth
2个回答
0
投票

以 CSV 形式发送数据,这样您就无需将字段名称包含在每个项目的有效负载中。

如果您想要 JSON,您可以缩小对象属性并将缩小图与数据一起发送:

const obj = {
    1: { width: 10.25, height: 30.75, },
    2: { width: 7.5, height: 1.25, },
};

let charCode = 97;

const pack = obj => JSON.stringify(
    Object.entries(obj).reduce((packed, [idx, item]) => {
        packed.obj[idx] = Object.keys(item).reduce((obj, key) => {
            obj[packed.map[key] ??= String.fromCharCode(charCode++)] = item[key];
            return obj;
        }, {});
        return packed;
    }, { obj: {}, map: {} })
);

const unpack = str => {

    const { obj, map } = JSON.parse(str);

    const inverted = Object.entries(map).reduce((inverted, [k, v]) => {
        inverted[v] = k;
        return inverted;
    }, {});


    return Object.entries(obj).reduce((obj, [idx, item]) => {
        obj[idx] = Object.entries(item).reduce((item, [key, val]) => {
            item[inverted[key]] = val;
            return item;
        }, {});
        return obj;
    }, {});

};

const packed = pack(obj);
console.log('PACKED:', packed);
const unpacked = unpack(packed);
console.log('UNPACKED', JSON.stringify(unpacked));


0
投票

您的问题有很多解决方案。 我会分享一些最常见的网络优化方法。

  1. 在序列化之前剥离对象。仅考虑对所讨论的通信很重要的属性。
  2. 考虑其他序列化选项。 JSON 编码只是对通过网络发送的数据进行编码的一种选择。其他选项,例如二进制序列化,其性能比文本(在本例中为 JSON)高得多。 二进制序列化。
  3. 您应该考虑的其他选项包括远程过程调用,它已被证明比 REST 性能更高。

最后,所有这些选项都需要某种程度的理解,以确保获得每个选项的最佳结果。

© www.soinside.com 2019 - 2024. All rights reserved.