栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Java记一次前后端大数据压缩过程

Java记一次前后端大数据压缩过程

近期开发一个功能时,发现后端返回的数据量太大,前端解析也很慢,严重影响了用户体验,然后有了这次调优过程。

先说下环境:

jdk 1.8

springboot ,cloud

vue

pgsql


测试工具:
postman
Chorme

在网上也找了很多的方法,有点是后端压缩了,但是速度也不理想,有的是后端加密了,前端解不了等等原因。

整个结论结果就是:

后端使用base64压缩,前端使用base64解压,其中依靠编码转换方法(unzip)。

没有时间的码友可以直接复制结果:

前端:




  
  
  Title
  
  


Java:

public class base64Utils {
    //  压缩字符串
    public static String compressData(String data) throws UnsupportedEncodingException {
        //要传输的字符串
        try {
            //压缩后写入字节流发送
            ByteArrayOutputStream
                    box = new ByteArrayOutputStream();
            DeflaterOutputStream
                    dos = new DeflaterOutputStream(box);
            // 压缩并将压缩后的内容输出到字节输出流box中
            dos.write(data.getBytes());
            dos.close();
            return getenbase64inCodec(box.toByteArray());
        } catch (Exception ex) {
            ex.printStackTrace();
            return "error";
        }
    }
    //为了压缩后的内容能够在网络上传输,一般采用base64编码
    public static String getenbase64inCodec(byte [] b) {
        if (b == null) return null;
        return new String(base64.encodebase64(b, false));
    }

}

第一步:

首先数据库,因为数据的特殊,查询时间在1s左右,整个后端处理完,大概不到2s。

浏览器F12看方法执行等待时间超5s,下载数据10x s,下载104m(未压缩),前端再渲染出来超过了1分钟,加上网络因素有的可达到2min +。

第二步:

思路是,将大数据在项目启动时,放入Redis,省去客户点击时,从数据库取的时间,尝试时间与之前基本没变。后面采取了几种压缩方式,将内存压缩到了20+m,但是要不前端解不了,要不就是数据格式有问题,最后采取的是上面方式,将数据在项目启动时,放入Redis之前压缩加密,取时判断key是否存在,若存在,直接返回,而且将加密的字符串放入Redis,存取都更快。前前后后所用整个后端处理时间+前端处理时间控制在3-5s内。比之前快了很多,目前用的就是这种解决方法。

上一张图:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号