Üye Kayıt Üye Giriş

ASP.NET ViewState İçeriğini Sıkıştırmak


ASP.NET ViewState İçeriğini Sıkıştırmak

 

ViewState verileri sayfa içerisinde Hidden fieldlerde tutmamıza olanak sağlayan bir yapıdır. ViewState içerisinde tutulan bilgiler sunucudan istemciye gönderilir ve aynı yolla yeniden sunucuya yüklenir. ViewStateler içerisindeki veriler Sessionlardan farklı olarak sunucuda saklanmazlar.  Her seferinde istemciye gönderilerek ağ trafiğini arttırdıkları gibi sayfa boyutlarını da büyütürler. ViewState içerisindeki bilgiler güvenlik sebebi ile şifrelenerek saklanır. Bir web sayfası açıp, sayfayı sağ tıkladıktan sonra kaynağı görüntüler derseniz sayfa içerisinde bulunan şifrelenmiş ViewState verisini görebilirsiniz.

 

Sayfa içerisindeki ViewState aşağıdaki gibidir.

0W592ll2+N+uGJTB4+/9eNBWBnJfaPJeUY1LgexBQ3jrWHYaMN/29VLnTExTCksHUzuKd57kVM4Cf3aajR4
CldwfkTCuUXiJufnsCq0YRFsn/R8t2Bb2fj/WDL6vXhFL7oXIgZgVDQ5btz/RmW9xVQo52enK0RfgKzB55EDnL
+JbDH725M4zBikQIbd00IgUdmCsaECn+xlD1s683NWYoAyx1hqkrR0445onKJf4YlmTtTXF5mINvdOleSxyy
EIR8IJf6hKY53oDfxMBlXDpof24FhmZPMazcKU8AsK4ZV8N6rVH3Uez+FAd+qZDdM9dMtRx7fliGigYHwjYV6
wGVlp6pC0PdIKe9o6W87FEoFumA317hBB3Ym50FbqmpKMUzFa2FVM1mWkB1oIfovB/r/k+VTvym8249B6
7dxJNFW8pPcyFzVXKVXWYQDHFDa6mXuAHE+69zkIpYIUmAKZFaQJuIhLbA0S0CssdxCGk4MKCCZzDZFU
sOroc5lMG/e6RDFFuRUMRL977NVnE90B6lnVSauQIRFb7ZWfnOu/xwjkWe7dkJMF7lyH26ljCyIeUrhel9J7rt+i
yCrUP062Olz+XScXfdsuM3QbMIjCeFSbv6UlbUgZJrhUvMVAezS2lmD2BvYbZTYFdUB8vw5Oc0axFK3Q2kH
GSYUTILiwKOSSGC1NkIwAcnUo94EdgFuMFPUYhHawD6XGIlR5iCznarmhU3UbjtUcaMm9S3HRiRrWFixjEBd
1zwwqcaDBIr24Lfe5eOuNvAtl9UFndgOwoYtDvp8TTfuZ4cxU961c9pcQXhwIZ424ir7BJV+P5OPq6xS/xgCRW
/pXa6fXAUvGxglxydPyByB5ou1QKKnMkfFeKxvcvOgSaCTQOW9RugNo3HV4Z5GrHcCdABr9/71JaOtvgan142
uEh6r6pAbTwhf71aA8fu0DGvMAdZ2cgibxL4WhKSRWV2jiUjlkrurWMU+vxaOwTwva60PkaLPkJJvBkyN6xH0Bs
JW7ymEzSbdFS+yHzX3gdqj4BcZ3SlnY2zKAk9Sn9FW3JZRfCvVmoxwXgyErs4UVDEJXKdZjjQcLE5hu/yDkOsT
CydkgRBEq1YkSIBKKKK3r3YzHiU7hypue+pYFCjocYPE4u9zUEsrC8SU8j1FGwLXoabxQZGvoVVe0Hu6/qPYG
SbCkokGly8r2ikieyOeChKSoOGkNdBgEF2jY5YNojJBurrWQx9u6Yl9n8cxhCNjjZsnBACz7SDShai0I+APUgpU8
FUcKDVipj2g8/QvDeyYB9Od9c9SqRlBiTUuoBQG09/eK9b8kN9OgWDiKYTxR9jDx6+VEO2SYCLprVyvT4do4t……

Yukarıda bir parçasını gördüğünüz ViewState verisi sayfa her postback olduğunda sunucuya gider. Sunucu bu veriyi çözümleyerek gerekli bilgileri aldıktan sonra güncelleyerek yeniden sayfaya içerisine yerleştirir ve istemciye gönderir. Sayfa boyutunu büyütmesi ve sunucu trafiğini arttırması viewstatelerin dezavantajlarından sayılabilir. Şimdi gelelim bu dezavantajı nasıl bir nebze giderebileceğimize.

 

ViewState verisini Sıkıştırmak

ViewStateler üzerinde web browser herhangi bir işlem yapmazlar. ViewStateler içerisindeki bilgileri sunucu kullanmaktadır. Öyleyse ViewState oluşturulurken bu bilgiyi sıkıştırarak sayfaya yerleştirirsek bir nebze boyuttan kazanmış oluruz. Sunucu ViewState den okuma yapacağı zamanda sıkışmış veriyi yeniden açarak üzerinde işlem yapabiliriz. Şimdi gelelim bunu nasıl yapabileceğimize.

Web projemize Mengene adında bir class ekleyelim ve bu classı App_Code içerisine yerleştirelim. Mengene classı içerisine aşağıdaki kodu ekleyelim.

public static class Mengene {

 

  public static byte[] Compress(byte[] veri)

  {

    MemoryStream output = new MemoryStream();

    GZipStream gzip = new GZipStream(output,CompressionMode.Compress, true);

    gzip.Write(veri, 0, veri.Length);

    gzip.Close();

    return output.ToArray();

  }

 

  public static byte[] Decompress(byte[] veri) {

    MemoryStream input = new MemoryStream();

    input.Write(veri, 0, veri.Length);

    input.Position = 0;

    GZipStream gzip = new GZipStream(input,CompressionMode.Decompress, true);

    MemoryStream output = new MemoryStream();

    byte[] buffer = new byte[64];

    int read = -1;

    read = gzip.Read(buffer, 0, buffer.Length);

    while(read > 0) {

      output.Write(buffer, 0, read);

      read = gzip.Read(buffer, 0, buffer.Length);

    }

    gzip.Close();

    return output.ToArray();

  }

}

         Yukarıdaki kodu inceleyecek olursak Compress fonksiyonu Framework ile gelen GZip nesnesini kullanarak gönderdiğimiz veriyi sıkıştırır. Decompress ise aynı işlemin tersini yapar. Şimdi gelelim bu işlemi sayfamızda nasıl kullanacağımıza.

         Sıkıştırma yapmak istediğimiz sayfaya ait kod kısmına gelelim ve aşağıdaki kodu yazalım. Aşağıdaki işlemi Masterpage içerisinde yapacak olursanız SavePageStateToPersistenceMedium, LoadPageStateFromPersistenceMedium metotları için hata alacaksınız. Bu yüzden masterpage içerisinde değil sayfanın kendine ait kod kısmında uygulamanız gerekiyor.

 

protectedoverridevoid

    SavePageStateToPersistenceMedium(object viewState)

{

    LosFormatter _formatter = newLosFormatter();

    MemoryStream ms = newMemoryStream();

    _formatter.Serialize(ms, viewState);

    byte[] viewStateArray = ms.ToArray();

    ClientScriptManager clientScript = Page.ClientScript;

    clientScript.RegisterHiddenField("__COMPRESSEDVIEWSTATE",

        Convert.ToBase64String(

        Mengene.Compress(viewStateArray)));

}

protectedoverrideobject

    LoadPageStateFromPersistenceMedium()

{

    LosFormatter _formatter = newLosFormatter();

    string vsString = Request.Form["__COMPRESSEDVIEWSTATE"];

    byte[] bytes = Convert.FromBase64String(vsString);

    bytes = Mengene.Decompress(bytes);

    return _formatter.Deserialize(

        Convert.ToBase64String(bytes));

}

 

Gördüğünüz gibi tek yaptığımız ASP.NET sayfalarına ait iki metotu override etmek ve içerisinden daha önce yazdığımız Mengene sınıfına ait metotları çağırmak. Hepsi bu kadar. Şimdi sayfalarınıza ait boyutlara bakacak olursanız % 10 ile % 50 arası bir küçülme fark edeceksiniz. Ben yazılım mutfağına ekledim ve ana sayfada %10’luk bir küçülme sağlarken Makale okuma sayfasında % 45’lik bir kazanç sağladım. Hiç de küçümsenecek bir kazanç değil. Helede hosting firmalarına daha fazla trafik için fazladan para ödemek istemiyorsanız. Peki yaptığımız bu işlemin maliyeti ne? Verileri sıkıştırmak sayfa boyutunu küçültü dolayısıyla ağ trafiğimizde o nebze azalmış oldu. Bu sıkıştırma işlemi sırasında sunucumuzun işlemcisine biraz iş düşüyor. E bunu da artık hosting firmamız düşünsün J.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER