本篇可以归纳在性能调优篇,虽然内容非常简单,但效果可能出乎预料的好;

分享一个真实案例,我们的服务部署在海外,国内访问时访问服务时,响应有点夸张;某些返回数据比较大的接口,耗时在 600ms+上,然而我们的服务 rt 却是在 20ms 以下,绝大部分的开销都花在了网络传输上

针对这样的场景,除了买云服务商的网络通道之外,另外一个直观的想法就是减少数据包的大小,直接在 nginx 层配置 gzip 压缩是一个方案,本文主要介绍下,SpringBoot 如何开启 gzip 压缩

I. gizp 压缩配置

1. 配置

SpringBoot 默认是不开启 gzip 压缩的,需要我们手动开启,在配置文件中添加两行

server:
compression:
enabled: true
mime-types: application/json,application/xml,text/html,text/plain,text/css,application/x-javascript

注意下上面配置中的mime-types,在 spring2.0+的版本中,默认值如下,所以一般我们不需要特意添加这个配置

// org.springframework.boot.web.server.Compression#mimeTypes
/**
* Comma-separated list of MIME types that should be compressed.
*/
private String[] mimeTypes = new String[] { "text/html", "text/xml", "text/plain",
"text/css", "text/javascript", "application/javascript", "application/json",
"application/xml" };

2. 测试

写一个测试的 demo

@RestController
public class HelloRest {
@GetMapping("bigReq")
public String bigReqList() {
List<String> result = new ArrayList<>(2048);
for (int i = 0; i < 2048; i++) {
result.add(UUID.randomUUID().toString());
}
return JSON.toJSONString(result);
}
}

下面是开启压缩前后的数据报对比

3. 说明

虽然加上了上面的配置,开启了 gzip 压缩,但是需要注意并不是说所有的接口都会使用 gzip 压缩,默认情况下,仅会压缩 2048 字节以上的内容

如果我们需要修改这个值,通过修改配置即可

server:
compression:
min-response-size: 1024

II. 其他

0. 项目

web 系列博文

项目源码

1. 一灰灰 Blog

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现 bug 或者有更好的建议,欢迎批评指正,不吝感激

下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

最新文章

  1. Python开发:环境搭建(python3、PyCharm)
  2. MongoDB学习笔记~MongoDB实体中的值对象
  3. java1.8常用的函数式接口
  4. C#调用windows API的一些方法
  5. Eclipse: JPA problem: Eclipse does not recognize content of persistence.xml
  6. java中PriorityQueue优先级队列使用方法
  7. NHibernate系列文章十九:NHibernate关系之多对多关系(附程序下载)
  8. LUA 协程
  9. CPU供电维修
  10. DedeCMS模板文件不存在,无法解析文档! 问题定位方法
  11. linux下安装protobuf教程+示例(详细)
  12. c#智能感知(设置)及实现
  13. Scribefire发CSDN博客
  14. checkbox复选框
  15. PHP添加、更新solr索引
  16. Hadoop学习之Hadoop集群搭建
  17. 深入理解 JavaScript 异步系列(2)—— jquery的解决方案
  18. spring 4 升级踩雷指南
  19. bzoj:2018 [Usaco2009 Nov]农场技艺大赛
  20. 01. SELECT显示和PRINT打印超长的字符

热门文章

  1. Myeclipse 反编译工具插件
  2. Django之CBV视图源码分析(工作原理)
  3. 使用Jersey构建图片服务器
  4. java 连续数字数组分组
  5. volatile关键字使用
  6. Java网络编程(一)Socket套接字
  7. 论文阅读 Prefetch-aware fingerprint cache management for data deduplication systems
  8. JavaSE(下)
  9. JavaSE语法(中)
  10. EffectiveJava-4