后端大量数据返回,采用数据压缩+分片操作,加快前端响应速度,个人技术总结

本文主要是介绍后端大量数据返回,采用数据压缩+分片操作,加快前端响应速度,个人技术总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 业务场景

场景类似于,可以查看到这段时间内指定的所有物品的运动轨迹,可以进行回放操作。

2. 解决方案

2.1. 在不考虑压缩的情况,可以尽可能减少传输数据的大小

比如

{[{"consDept":"A部门","consDeptCode":"001","provinceScheduleVO":[{"projectTypeCode":"DEngineering","percentSchedule":"100","planStartStatus":"2"},{"projectTypeCode":"Main","percentSchedule":"50","planStartStatus":"2"}, ……]},{"consDept":"B部门","consDeptCode":"002","provinceScheduleVO":[{"projectTypeCode":"DEngineering","percentSchedule":"100","planStartStatus":"1"},{"projectTypeCode":"Main","percentSchedule":"0","planStartStatus":"1"}, ……]}, …… ]};

把consDept属性名改成a,consDeptCode属性名改成b,把projectTypeCode属性名称改成c, ……  切记不要传输前台不需要的属性。

处理后的数据格式为:

{[{"a":"A部门","b":"001","VO":[{"c":"DEngineering","d":"100","e":"2"},{"c":"Main","d":"50","e":"2"}, ……]},{"a":"B部门","b":"002","VO":[{"c":"DEngineering","d":"100","e":"1"},{"c":"Main","d":"0","e":"1"}, ……]}, …… ]};

数据量也减少了

再这基础上还可以进行优化

改成键值对的形式

对于这种数组形式,如果数据格式相对比较简单,没有嵌套的一维数组,甚至可以改成键值对的形式

比如 “a”:["A部门","B部门","C部门"] ,以减少“a”属性名称出现的次数。  

2.2 分片上传

我们这个数据有开始时间和结束时间的设置,我们就可以知道结束时间,自动就可以获取到,我们固定时间分片要求是什么呢?要求就是倍数的要求,从当前时间开始,以一小时作为一次分割快,最后如果不足1h,则直接获取就行。这样子也可以优化

2.3 后端数据压缩

考虑到数据带宽的问题,我们组长选择后端数据压缩的解决方案

后端使用压缩

协议是:http的请求头 Accept-Encoding:gzip,

你需要将数据转换为字节数组,然后使用GZIPOutputStream对其进行压缩

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;public class DataCompressor {public static byte[] compressData(String jsonData) throws IOException {ByteArrayOutputStream outputStream = new ByteArrayOutputStream();try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream)) {gzipOutputStream.write(jsonData.getBytes("UTF-8"));}return outputStream.toByteArray();}
}

接着实现将压缩后的数据作为HTTP响应体发送,并设置相应的Content-Encoding头部。

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;@RestController
public class DataController {@GetMapping("/compressedData")public void getCompressedData(HttpServletResponse response) throws IOException {// 假设这是你的大量JSON数据String jsonData = "{\"large\": \"data\", ...}";// 压缩数据byte[] compressedData = DataCompressor.compressData(jsonData);// 设置响应头response.setHeader("Content-Encoding", "gzip");response.setContentType("application/json");response.setContentLength(compressedData.length);// 将压缩数据写入响应体response.getOutputStream().write(compressedData);}
}

这篇关于后端大量数据返回,采用数据压缩+分片操作,加快前端响应速度,个人技术总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038713

相关文章

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali