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

07 Mart 2016 4 dk okuma süresi 408 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.
Form post ile giden tüm dataları loglama

Asp.net Core ile farklı bir class library'den appsettings json dosyasını kolayca okumak

Hatalı bundle kullanımından dolayı alınan MIME type hatası ve çözümü