Thursday , 12 December 2024
HOT

Tối ưu hóa Website với Gzip trong asp.net

Gzip là một kỹ thuật trong lập trình asp.net làm tối ưu hóa dung lượng tải về giữa Client và Webserver qua đó sẽ tiết kiệm được băng thông cho Webserver 🙂

Thời gian cho các HTTP Request và Response (trả lời) trên mạng có thể được giảm bởi các quyết định sáng suốt từ người dùng. Thời gian truy cập web cũng phụ thuộc rất nhiều vào người dùng ví như băng thông sử dụng Internet của họ hay, ISP. Nhưng một vài thứ có thể ảnh hưởng tới thời gian trả lời của website. Việc nén dung lượng của các file có thể nâng cao thời gian đáp ứng cho HTTP Request.
Bắt đầu với HTTP/1.1, các web clients đã hỗ trợ việc nén với các Accept-Encoding header trong các HTTP Request.

Accept-Encoding: gzip, deglate
Nếu máy chủ web thấy header này trong quá trình request, nó sẽ nén các file hay các thành phần khác sau đó mới gửi lại cho web client. Khi đó máy chủ web sẽ gửi các trả lời trong Encoding header.

Content-Encoding: gzip


Gzip rất phổ biến và hiệu quả trong việc nén đáp ứng vấn đề thời gian trả nén, gửi. Được phát triển bởi dự án GNU được thành chuẩn RFC 1952. Chỉ vài phương pháp nén khác nhưng bạn sẽ thấy nó không phổ biến và kém hiệu quả so với Gzip.

Gzipping giảm thời gian đáp ứng các yêu cầu của client bằng cách nén các thông tin trả lời và giảm đươc 70% kích thước. Hầu hết 90% các giao tiếp trên Internet giữa các trình duyệt và máy chủ web đều sử dụng Gzip. Nếu bạn sử dụng Apache, có module để bạn cấu hình Gzip như các phiên bản: Apache 1.3 sử dụng Mod Gzip trong khi Apache 2.x sử dụng Mod DeFlate.

Nó được hiểu, với các trình duyệt hay proxy có thể sẽ không hiểu được nội dung khi nhận được nếu không hiểu cơ chế nén và các nội dung đã được nén. Thật may mắn, hiện nay hâu hết các trình duyệt web cũ đều không sử dụng. Module của Apache có thể giúp bạn them vào nhiều dạng headers khác nhau, hỗ trợ nhiều trình duyệt, tùy theo mỗi trình duyệt mà tự động lấy một phương pháp giải nén khác nhau.

Máy chủ chọn Gzip dựa trên các dạng file, nhưng đa số là cũng có giới hạn trong việc nén. Hầu hết các website đều sử dụng Gzip cho các tài liệu HTML. Nó cũng sử dụng Gzip cho các scripts và các stylesheets. Nhưng nó thật thú vị khi nén toán bộ các định dạng text như XML và JSON. Hình ảnh và các file dạng PDF có thể sẽ không sử dụng được Gzip bởi định dạng đó nó đã được nén rồi. Sử dụng Gzip không ảnh hưởng tới CPU nhưng nó có nguy cơ tăng kích thước file.

Gzipping hỗ trợ rất nhiều định dạng file, dễ dàng sử dụng nhằm giảm độ lớn của các file trong giao tiếp trên giữa web client và máy chủ web.

File Global.asax


<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
 
<script runat="server">
void Application_BeginRequest(object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    string acceptEncoding = app.Request.Headers["Accept-Encoding"];
    Stream prevUncompressedStream = app.Response.Filter;
 
    if (acceptEncoding == null || acceptEncoding.Length == 0)
        return;
 
    acceptEncoding = acceptEncoding.ToLower();
 
    if (acceptEncoding.Contains("gzip"))
    {
        // gzip
        app.Response.Filter = new GZipStream(prevUncompressedStream,
            CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding",
            "gzip");
    }
    else if (acceptEncoding.Contains("deflate"))
    {
        // defalte
        app.Response.Filter = new DeflateStream(prevUncompressedStream,
            CompressionMode.Compress);
        app.Response.AppendHeader("Content-Encoding",
            "deflate");
    }
}
</script>

kiểm tra lại:

http://www.port80software.com/tools/compresscheck.asp?url=chiencong.com

một số website đã được Gzip:

nước ngoài

http://www.port80software.com/tools/compresscheck.asp?url=microsoft.com
http://www.port80software.com/tools/compresscheck.asp?url=dell.com
http://www.port80software.com/tools/compresscheck.asp?url=asp.net

việt nam

http://www.port80software.com/tools/compresscheck.asp?url=dantri.com.vn
http://www.port80software.com/tools/compresscheck.asp?url=chiencong.com

bạn có thể tải dll có sẵn về tại
http://blowery.org/httpcompress/
và tham khảo code ở
http://www.codeproject.com/KB/aspnet/HttpCompress.aspx

Chúc các bạn thành công

N g u ồ n : m e o t o m . n e t

Leave a Reply

Your email address will not be published. Required fields are marked *

*