Nén GZIP cho Website ASP.NET và ASP.NET MVC

Chào mọi người!
Hôm nay ngồi kiểm tra lại phần dữ liệu trả về của trang lộ trình và trang giám sát online thì mình đã có một số kinh nghiệm, muốn chia sẻ lại với các bạn.
1. Trang lộ trình
– Trước khi chỉnh lại, khi xem 1 xe dữ liệu trả về là: 5,8 MB
– Sau khi chỉnh lại, dữ liệu trả về chỉ còn: 159 KB => giảm tới 36 lần, 1 con số giật mình
2. Trang online
– Trước khi chỉnh lại, dữ liệu trả về 1 phiên thường là 600KB
– Sau khi chỉnh lại, dữ liệu trả về 1 phiên chỉ còn: khoảng 35KB => giảm tới 17 lần.
3. Kỹ thuật để giảm tải dữ liệu trả về
– Dữ liệu bên mình làm việc chủ yếu là JSON, khi đặt tên thuộc tính mà dài thì tên của key còn nhiều hơn cả value => mình đã chỉnh lại tên khi JSON trả về ngắn nhất có thể
+ Dữ liệu trước khi giảm
{
"Time":"\/Date(1454605200000)\/",
"Lat":21.008797,
"Lng":105.854355,
"LatLng":"21,008797, 105,854355",
"CustomerNumber":1,
"VelocityGPS":14,
"VBgt":14,
"Eyestatus":true,
"EyestatusStr":null,
"Speedometer":14,
"AccumulatedKm":0,
"IsOverSpeed":false,
"IsLostGPS":false,
"IsLostGSM":false,
"IsStoped":false,
"IsHasGuest":true,
"IsMachineOff":false,
"MachineOffText":"Bật",
"IsAirConditionerOn":false,
"AirConditionerOnText":"Tắt",
"Message":"Có khách",
"Color":"Blue",
"TotalKm":8.54,
"TotalKmHasGuest":0.73,
"HasGuestStr":null,
"Address":null,
"TotalMachineOnMinute":23,
"TotalACOnMinute":0,
"RowNumber":0,
"VehicleID":null,
"VehiclePlate":null,
"PrivateCode":null,
"CompanyID":0,
"VehicleModel":null,
"VehicleSeat":0,
"VehicleType":"",
"ObjectState":0
}

+ Dữ liệu sau khi giảm

{
"p1":"\/Date(1454605200000+0700)\/",
"p2":14,
"p3":14,
"p4":0.0,
"p5":21.008797,
"p6":105.854355,
"p7":14.0,
"p8":1,
"p9":"Có khách",
"p10":"Blue",
"p11":null,
"p12":33,
"p13":"68,27;39,99;304;",
"p14":true
}

+ Như các bạn đã thấy, mình đã chuyển tên các thuộc tính về ngắn nhất có thể, và các giá trị dạng bool mình đã gom lại cho p12 (dạng Flags và mình sẽ dùng bitwise ở phía client để giảm tải dữ liệu đi về.)
+ Với cách cắt giảm như trên thì mình đã tiết kiệm dữ liệu từ 5,7MB xuống còn 1,4MB (Giảm khá nhiều, nhưng cần thêm 1 lần nữa để giảm triệt để hơn)
– Bật chức năng GZIP có sẵn trong ASP.NET để giảm kích thước trả về
+ Thực ra đây là phần có sẵn của ASP.NET, mình chỉ cần khai báo 1 ít trong Global.asax là có thể giảm khá nhiều.
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
string acceptEncoding = app.Request.Headers["Accept-Encoding"];
System.IO.Stream prevUncompressedStream = app.Response.Filter;

if (acceptEncoding == null || acceptEncoding.Length == 0)
return;

acceptEncoding = acceptEncoding.ToLower();

if (acceptEncoding.Contains(“gzip”))
{
// gzip
app.Response.Filter = new System.IO.Compression.GZipStream(prevUncompressedStream,
System.IO.Compression.CompressionMode.Compress);
app.Response.AppendHeader(“Content-Encoding”,
“gzip”);
}
else if (acceptEncoding.Contains(“deflate”))
{
// defalte
app.Response.Filter = new System.IO.Compression.DeflateStream(prevUncompressedStream,
System.IO.Compression.CompressionMode.Compress);
app.Response.AppendHeader(“Content-Encoding”,
“deflate”);
}
}

+ Sau khi khai báo GZIP, dữ liệu của mình từ 1,4 MB => 159 KB (Giảm khoảng gần 9 lần)
– 1 số link tham khảo
+ http://thuyvk.com/article/su-dung-nen-gzip-cho-website-aspnet-178
+ http://checkgzipcompression.com/

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s

%d bloggers like this: