• web平台大数据请求传输性能处理


    在XMLHttpRequest请求中使用ArrayBuffer方式,和后端服务器进行二进制的传输交互。

    在项目中发现随着用户增长,部分前端功能,请求的数据量越来越大,传统的josn的方式,在下载、序列化时非常慢,因此尝试使用二进制+压缩的方式提升性能。

    服务端Java代码:

    实体类:
    public class ByteTest implements Serializable{
    
        private static final long serialVersionUID = 4073873126215417736L;
        private long id;
        private String name;
        private String desc;
        private double lon;
        private double lat;
    
        public ByteTest(long id, String name, String desc, double lon, double lat) {
            this.id = id;
            this.name = name;
            this.desc = desc;
            this.lon = lon;
            this.lat = lat;
        }
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        public double getLon() {
            return lon;
        }
    
        public void setLon(double lon) {
            this.lon = lon;
        }
    
        public double getLat() {
            return lat;
        }
    
        public void setLat(double lat) {
            this.lat = lat;
        }
    }
    
    控制层:
    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        @GetMapping("/testByte")
        public byte[] testByte() throws Exception{
            ByteTest model = new ByteTest(1001,"保安室","abc",133.123456789,22.123456789);
            byte[] content=JSON.toJSONString(model).getBytes("utf-8");
            // return content;
    
            byte[] result = new byte[]{};
            try {
                ByteArrayOutputStream bos = new ByteArrayOutputStream(content.length);
                GZIPOutputStream gzipOS = new GZIPOutputStream(bos);
                gzipOS.write(content);
                gzipOS.close();
                result = bos.toByteArray();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
    }

    客户端JS代码:

    <script src="js/pako.min.js"></script>  <!--引用解压用的pako.mini.js -->
         <script type="text/javascript">
            var oReq = new XMLHttpRequest();
            oReq.onload = function(e) {
                var responseArray  = new Uint8Array(this.response);
                var responseString = new TextDecoder().decode(pako.ungzip(responseArray));
            }
            oReq.open("GET", "http://dev.xx.com:8080/test/testByte", true);
            oReq.responseType = "arraybuffer";
            oReq.send();
    </script>

    pako.min.zip

  • 相关阅读:
    FORM中的get post方法区别
    二叉树优势
    Map 排序
    ajax+MultipartFile上传文件到本地
    阿里巴巴开发手册
    poi快速导入导出excel表格
    String.trim()、.contains()等的作用
    eclipse导入ssm框架的项目,报tomcat无法启动的错误,如下:
    lesson5_oa文件操作
    lesson4_函数
  • 原文地址:https://www.cnblogs.com/brant/p/11680266.html
Copyright © 2020-2023  润新知