Optimalisasi Performance ASP.net

MENYIMPAN INFORMASI VIEWSTATE DI SERVER

Dalam aplikasi web terdapat banyak faktor yang mempengaruhi performance. Salah satu yang menjadi ‘kekurangan’ ASP.net adalah Viewstate. Viewstate ini berisi informasi-informasi dari semua control yang ada di page. Informasi control ini sebenarnya diproses di server dan kemudian di simpan di viewstate dan ditempelkan ke page dan dikirim ke client. Dan tentu saja, semakin besar informasi viewstate ini, semakin besar pula ukuran file yang di transfer ke client. Untuk melihat informasi viewstate, buka halaman .aspx dan lihat kode sumbernya (view source)

Setiap control di halaman selalu memiliki viewstate padahal tidak semua digunakan. Jika ketika proses postback kita tidak memerlukan informasi dari suatu control maka kita tidak perlu menyimpan viewstate. Kita bisa mematikan viewstate suatu control dengan set ‘EnableViewState=false’ di property control. Tentunya kita harus jeli, menentukan control mana yang memerlukan viewstate dan mana yang tidak.

Selain setting diatas, kita juga bisa memindahkan informasi viewstate ini ke server, jadi tidak akan diikutsertakan dalam page yang dikirim ke client. Untuk menyimpan informasi viewstate di server, kita perlu meng override method ‘SavePageStateToPersistenceMedium’ dan method ‘LoadPageStateFromPersistenceMedium’

Berikut contoh kode bagaimana menyimpan viewstate ke dalam Cache.
1. Buat satu class (saya namakan MyBasePage) yang merupakan turunan dari class ‘System.Web.UI.Page’
2. Override method ‘SavePageStateToPersistenceMedium’ dan ‘LoadPageStateFromPersistenceMedium’

    public class MyBasePage : System.Web.UI.Page 
    {
        protected override void SavePageStateToPersistenceMedium(object state)
        {
			//buat key yang digunakan identifikasi viewstate yang disimpan
            string Viewstatekey = "Viewstate_" + base.Session.SessionID + "_" + Request.Url.AbsolutePath + "_" + DateTime.Now.Ticks.ToString();
			
			//ada tambahan setting di AppSetting Web.Config untuk menentukan apakah viewstate
			//akan disimpan di server atau tidak
            if (System.Configuration.ConfigurationManager.AppSettings["ServerSideViewState"].ToString().ToLower() == "true")
            {
				//viewstate disimapn dalam cache, (bisa juga menggunakan Session)
                Cache.Add(Viewstatekey, state, null, DateTime.Now.AddMinutes((double)Session.Timeout),
                   System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, null);

                ClientScript.RegisterHiddenField("__VIEWSTATE_KEY", Viewstatekey);
            }
            else
            {
                //default proses. viewstate disimpan di page
                base.SavePageStateToPersistenceMedium(state);
            }
        }
        //------------
        protected override object LoadPageStateFromPersistenceMedium()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ServerSideViewState"].ToString().ToLower() == "true")
            {
                string Viewstatekey = Request.Form["__VIEWSTATE_KEY"];
                if (!Viewstatekey.StartsWith("Viewstate_"))
                {
                    throw new Exception("Invalid VIEWSTATE Key: " + Viewstatekey);
                }
                return Cache[Viewstatekey];
            }
            else
                return base.LoadPageStateFromPersistenceMedium();
        }
       
    }

3. Tambahkan kode di file Web.Config

	<appSettings>
		<add key="ServerSideViewState" value="True"/>
	</appSettings>

4. Di page code behind (*.aspx.vb/cs), ubah kode
‘public partial class Default : System.Web.UI.Page‘ menjadi ‘public partial class Pelaporan_LstObvit : MyBasePage
5. Jalankan aplikasinya dan lihat kode source nya (viewsource)

Semoga bermanfaat

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 14 Oktober 2011, in ASP.net and tagged , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: