Asp.Net Mvc projelerinde performans artırmanın yolları

07 Mart 2016 4 dk okuma süresi 272 okunma

Pipeline Modu (Integrated - IIS7+)

Eğer IIS6'dan IIS7 veya üzerinde geçiş yapmadıysanız uygulamanızı "Integrated" modunda çalıştırın. Bunun performansa şöyle bir etkisi var. Classic pipeline modunda gelen her request (istek) ilk olarak IIS pipeline ve sonrasında ASP.Net'in kendi pipeline'ından geçer. Integrated pipeline modunda bu 2 iş birleştirilmiştir. Yani istekler tek pipeline üzerinden işlem görür. Bu da performansın artması demek oluyor. Bu kısımda hata yapmayın çünkü IIS6'dan geçerken bazı şeylerin classic mod'ta çalışması gerekebiliyor. Bu nedenle geçiş pipeline modunu düzenlerken dikkatli olmalısınız.

Kullanmadığınız HttpModule'leri Kaldırın

Pipeline modunda belirttiğim gibi gelen istekler pipeline üzerinden geçer ve bu HttpModule'leri burada bulunur. Kullanmadığınız modülleri buradan kaldırmakta performansınızı artırır.

<system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
      <remove name="DefaultAuthentication" />
      <remove name="AnonymousIdentification" />
      <remove name="OutputCache" />
      <remove name="RoleManager" />
      <remove name="Profile" />
    <modules>
<system.webServer>

OutputCache Kullanın

Cache mekanizmasını mutlaka kullanın. Gereksiz yere aynı sql sorgularını çalıştırmanıza hiç gerek yok. Özellikle sık güncellenmeyen yerlerde mutlaka kullanın. Örneğin blogunuzdaki yazıları gün aşırı güncelliyorsanız 1 günlük cache kullanabilir ve her gelen ziyaretçinin aynı sorguyu çalıştırmasını engelleyebilir ve performansı artırabilirsiniz.

[OutputCache(VaryByParam = "none", Duration = 3600)] 
public ActionResult Index() 
{ 
    return View(); 
}

// aşağıdaki gibi de kullanabilirsiniz.

Cache.Insert("Key", "Value", null, 
      System.Web.Caching.Cache.NoAbsoluteExpiration, 
      new TimeSpan(0, 10, 0));

Run All Managed Modules For All Requests

Bir diğer web.config ayarı olan runAllManagedModulesForAllRequests'te önemli bir performans artırıcı. Yine pipeline kısmında bahsettiğimiz gibi tüm istekler pipeline üzerinden geçmekte. Bu değer true olduğunda tüm css, js ve img gibi içerikler için yapılan isteklerde pipeline üzerinden geçer. Bu gibi işlemler için cdn kullanmanız performans açısından daha yararlı olur. Özellikle ziyaretçi sayınız çoksa ve routing kullanıyorsanız (bazı url yönlendirmelerinin çalışmamasına neden olabiliyor) true olarak kalması performans sorunlarına yol açabilir.

<modules runAllManagedModulesForAllRequests="true" />

Ekstra ViewEngine'leri Kaldırın

Asp.Net Mvc ile web uygulamaları geliştirirken birçok viewengine kullanabilirsiniz. Bunların en bilinenleri Razor, WebformViewEngine, Bellevue, Brail ve Spark gibi view engine'lerdir. Eğer bunlardan sadece birisi ile geliştirme yapıyorsanız Global.Asax üzerinden uygulama başlangıcında sadece tek view engine kullanacağınızı belirtebilir ve performansınız artırabilirsiniz. Örneğin ben Razor kullanarak web uygulamaları geliştiriyorum, bu nedenle sadece RazorViewEngine'i ekliyorum.

protected void Application_Start()
{
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RazorViewEngine());
}

Http Compression Kullanın

Dinamik olarak oluşan veya statik olan içeriklerinizi sıkıştırın.

<system.webServer>
    <urlCompression doDynamicCompression="true" doStaticCompression ="true" dynamicCompressionBeforeCache="true" />
</system.webServer>

Gzip Sıkıştırması Kullanın

<system.webServer>
    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
        <dynamicTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/javascript" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </dynamicTypes>
        <staticTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/javascript" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </staticTypes>
    </httpCompression>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
VS2015'in 3. update'ini yaptıktan sonra asp.net core web uygulaması yaratmak istediğimde şu şekilde bir hata ile karşılaştım. "Exception : The system cannot find the file specified. (Exception from HRESULT: 0x80070002)". Çözümü oldukça basit.

Entity framework code first kullanıyorsanız ve inheritance yapıp yeni bir class yarattığınızda bunun gibi bir hata alırsınız. Bunun nedeni fluent api'nin inheritance yapılan class ile ana class'ın map yapmaya çalışması ve ilgili kolonu veritabanında bulamamasıdır. Çözümü ise inherit olmuş class'a [NotMapped] DataAnnotations attribute'unu eklemek.

Asp.Net Mvc ile recursive nasıl yazılır, @helper veya HtmlHelper kullanarak recursive fonksiyon yazmak, Asp.Net MVC View recursive fonksiyon nasıl yazılır?