You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// big JSONconstjson={...}// pack the big JSON constpacked=jsonpack.pack(json);// do stuff...// And then unpack the packedconstjson=jsonpack.unpack(packed);
问题描述
由于一些业务场景,跳转到对应的页面需要在其页面的URL上带上大量的json(包含中文字符),但是这个页面由于链接长度过长会导致页面中的请求被截断,发生一些不可预知的情况,所以如何优化业务的这种情况?
思路
1. pack算法压缩
1.1 实现代码:
现有的
npm package jsonpack
实现了json
的压缩算法,可直接调用使用:1.2 压缩结果
通过
pack
算法压缩 ,压缩之后关键信息长度:531,对应结果如下:1.3 编码结果
经过
encodeURIComponent
编码之后,关键信息长度 1853,对应结果如下:1.4 压缩效果
压缩比:1853/2750 = 0.673818182
2. 指定分割字符
2.1 实现代码:
使用_作为对象属性分割,使用*作为对象分割,核心实现代码
2.2 压缩结果
使用_作为对象属性分割,使用*作为对象分割,压缩之后关键信息长度:404,压缩结果如下:
2.3 编码结果
经过
encodeURIComponent
编码之后,关键信息长度:16702.4 压缩效果
压缩比:1670 / 2750 = 0.607272727
3. Gzipped 压缩
3.1 实现代码
使用
Node
中的zlib
进行压缩处理,核心实现代码如下:3.2 压缩结果
通过
gzip
压缩对应json
压缩之后,关键信息长度:544,结果如下:3.3 编码结果
经过
encodeURIComponent
编码之后,关键信息长度:582,结果如下:3.4 压缩效果
压缩比:582 / 2750 = 0.211636364
4. 方案总结
最终方案
1. 来源页服务端
1.1 分割
使用_作为对象属性分割,使用*作为对象分割,压缩有长度:(关键信息长度:404)
1.2. 压缩
指定字符进行压缩 + gzip压缩(字符编码为base64格式) (关键信息长度:480)
1.3. 编码
使用encode针对参数进行转码处理(关键信息长度:496)
1.4. 效果
496 / 2750 = 0.180363636
2. 承接页服务端
2.1. 解码
2.2. 解压缩
2.3. 解分割
问题记录
1. url解析
针对带有
base64
的url
参数,使用qs.parse
进行解析,会将base64
中的+
变为空格,所以需要使用replace(/\+/g, '%2B'))
提前进行处理The text was updated successfully, but these errors were encountered: