最近一直在优化项目的性能,就在前几天找到了一些资料,终于有方案了,那就是压缩数据。
一丶前端和后端的压缩和解压缩流程
二丶优点和缺点
优点:①字符串的压缩率能够达到70%-80%左右
②字符串数量更少了
缺点:①CPU的开销会大一点,不过在可承受范围之内
三丶通过标记来说明数据是否压缩过
这个一开始是没有想到,是经理提醒我的,通过在数据(字符串)的最前端添加一个标记来说明数据是否压缩过。
因为只有当数据大于一定数量的时候才进行压缩操作。
四丶测试(简单的测试)
环境:1.启动500线程 (相当于500个客户端)
2.500个线程同时调用
3.服务端和客户端在同一个局域网的两台PC机
4.未压缩的字符串长度为65000,压缩之后长度为8400
测试结果:
结果:其实测试的结果很明显了,通过压缩数据来减少网络数据量的传输,确实可以提高速度。
五丶代码
1 public class CompressionHelper
2 {
3 public static string Compress(string value)
4 {
5 string result = string.Empty;
6 try
7 {
8 byte[] buffer = Encoding.UTF8.GetBytes(value);
9 using (MemoryStream memoryStream = new MemoryStream())
10 {
11 using (DeflateStream deflateStream = new DeflateStream(memoryStream, CompressionMode.Compress, true))
12 {
13 deflateStream.Write(buffer, 0, buffer.Length);
14 }
15 result = Convert.ToBase64String(memoryStream.ToArray());
16 }
17 }
18 catch (InvalidDataException invalidData)
19 {
20 //Log21 }
22 catch (Exception exception)
23 {
24 //Log25 }
26 return result;
27 }
28
29 public static string Decompress(string value)
30 {
31 string result = string.Empty;
32 try
33 {
34 byte[] bytes = Convert.FromBase64String(value);
35 using (MemoryStream outStream = new MemoryStream())
36 {
37 using (MemoryStream inStream = new MemoryStream(bytes))
38 {
39 using (DeflateStream deflateStream = new DeflateStream(inStream, CompressionMode.Decompress, true))
40 {
41 int readLength = 0;
42 byte[] buffer = new byte[1024];
43 while ((readLength = deflateStream.Read(buffer, 0, buffer.Length)) > 0)
44 {
45 outStream.Write(buffer, 0, readLength);
46 }
47 }
48 }
49 result = Encoding.UTF8.GetString(outStream.ToArray());
50 }
51 }
52 catch (InvalidDataException invalidData)
53 {
54 //Log55 }
56 catch (Exception exception)
57 {
58 //Log59 }
60 return result;
61 }