ASP Genel VMware

ASP.Net Core MVC ile Performans Optimizasyonu Teknikleri

ASP.Net Core MVC ile Performans Optimizasyonu Teknikleri

ASP.Net Core MVC ile Performans Optimizasyonu Teknikleri

ASP.Net Core MVC, modern web uygulamaları geliştirmek için güçlü ve esnek bir çerçevedir. Ancak, uygulamalarınızın performansını en üst düzeye çıkarmak için çeşitli optimizasyon tekniklerini bilmek önemlidir. Bu makalede, ASP.Net Core MVC ile performans optimizasyonu yaparken dikkate almanız gereken bazı önemli teknikleri ve uygulamaları inceleyeceğiz.

1. Veritabanı Optimizasyonu

1.1. Sorgu Performansını Artırma

Veritabanı sorguları, web uygulamalarının performansını önemli ölçüde etkileyebilir. Bu nedenle, sorguların optimize edilmesi kritik bir adımdır.

using (var context = new ApplicationDbContext())
{
    var users = context.Users
                       .Where(u => u.IsActive)
                       .OrderBy(u => u.LastName)
                       .ToList();
}

Bu kod, veritabanından yalnızca aktif kullanıcıları çekerek performansı artırır.

1.2. Lazy Loading ve Eager Loading

Lazy loading, yalnızca ihtiyaç duyulduğunda ilişkili verilerin yüklenmesini sağlar. Ancak, gereksiz veritabanı çağrılarına neden olabilir. Eager loading ise ilişkili tüm verileri baştan yükler.

var orders = context.Orders
                    .Include(o => o.OrderItems)
                    .ToList();

Bu örnek, Include yöntemiyle eager loading kullanarak OrderItems verilerini önceden yükler.

2. Önbellekleme Stratejileri

2.1. MemoryCache Kullanımı

ASP.Net Core, MemoryCache sınıfı ile sunucu belleğinde veri önbelleğe almayı destekler.

services.AddMemoryCache();

public class ProductService
{
    private readonly IMemoryCache _cache;

    public ProductService(IMemoryCache cache)
    {
        _cache = cache;
    }

    public Product GetProduct(int id)
    {
        if (!_cache.TryGetValue(id, out Product product))
        {
            product = // veritabanından ürünü al
            _cache.Set(id, product, TimeSpan.FromMinutes(10));
        }
        return product;
    }
}

Bu örnek, ürün verilerini bellekte 10 dakika süreyle önbelleğe alır.

2.2. Response Caching

HTTP yanıtlarını önbelleğe almak, istemci tarafında yükü azaltabilir.

app.UseResponseCaching();

[ResponseCache(Duration = 60)]
public IActionResult Index()
{
    return View();
}

Bu örnek, Index eyleminin yanıtını 60 saniye boyunca önbelleğe alır.

3. Asenkron Programlama

3.1. Async ve Await Kullanımı

Asenkron programlama, uygulamanızın yanıt verme süresini artırabilir ve kaynakları daha verimli kullanabilir.

public async Task GetDataAsync()
{
    var data = await _service.GetDataAsync();
    return View(data);
}

Bu örnek, verileri asenkron olarak alarak kullanıcı arayüzünün donmasını önler.

4. Sunucu Tarafı Optimizasyonları

4.1. Kestrel Performans Ayarları

Kestrel, ASP.Net Core uygulamaları için varsayılan web sunucusudur. Performans ayarlarını optimize etmek önemlidir.

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseKestrel(options =>
            {
                options.Limits.MaxConcurrentConnections = 100;
                options.Limits.MaxRequestBodySize = 10 * 1024;
            });
            webBuilder.UseStartup();
        });

Bu ayarlar, Kestrel’in eşzamanlı bağlantı ve istek boyutu sınırlarını belirler.

4.2. Sunucu Seçimi

Performans optimizasyonu için doğru sunucu seçimi de önemlidir. VDS Sunucular veya Cloud Sunucular gibi esnek ve ölçeklenebilir çözümler tercih edilebilir.

5. Dosya ve Varlık Optimizasyonu

5.1. Statik Dosyaların Sıkıştırılması

Statik dosyaların sıkıştırılması, bant genişliği kullanımını azaltabilir ve yükleme sürelerini hızlandırabilir.

app.UseStaticFiles(new StaticFileOptions
{
    OnPrepareResponse = ctx =>
    {
        ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=600");
    }
});

Bu örnek, statik dosyalar için önbellekleme başlıkları ekler.

5.2. GZIP Sıkıştırması

GZIP sıkıştırması, HTTP yanıt boyutunu azaltarak performansı artırabilir.

services.AddResponseCompression(options =>
{
    options.EnableForHttps = true;
});

app.UseResponseCompression();

Bu ayarlar, tüm HTTP yanıtları için GZIP sıkıştırmasını etkinleştirir.

6. Bağımlılık Yönetimi

6.1. Dependency Injection

ASP.Net Core, yerleşik bir bağımlılık enjeksiyonu (DI) sistemi sunar. Doğru bir DI yapılandırması, uygulamanızın performansını artırabilir.

services.AddScoped<IProductService, ProductService>();

Bu kod, IProductService bağımlılığını ProductService ile eşler.

6.2. Hizmet Yaşam Süresi

Hizmetlerin yaşam sürelerini doğru ayarlamak, kaynak kullanımını optimize edebilir.

Transient: Her istek için yeni bir örnek oluşturur.
Scoped: Her istek için bir örnek oluşturur.
Singleton: Uygulama başına bir örnek oluşturur.

7. Diğer Optimizasyon Teknikleri

7.1. Sık Kullanılan Verilerin Önbelleğe Alınması

Özellikle sık erişilen ve değişmeyen veriler, Sanal Sunucular gibi çözümlerle daha verimli bir şekilde yönetilebilir.

7.2. CDN Kullanımı

İçerik Dağıtım Ağı (CDN), statik içeriklerin yükleme sürelerini kısaltabilir ve sunucu yükünü azaltabilir.

8. Güvenlik ve Performans İlişkisi

Güvenlik önlemleri, performansı etkileyebilir. Bu nedenle, performansı optimize ederken güvenlikten ödün vermemek önemlidir.

8.1. SSL/TLS Optimizasyonu

SSL sertifikaları, verilerin güvenliğini sağlarken performansı da etkileyebilir. SSL Sertifikaları ile güvenli ve hızlı bir yapılandırma sağlanabilir.

8.2. Güvenlik Duvarı Ayarları

Güvenlik duvarı ayarları, uygulamanızın hem güvenliğini hem de performansını etkileyebilir. Firewall Hizmetleri ile optimize edilmiş bir güvenlik duvarı yapılandırması yapılabilir.

Sonuç

ASP.Net Core MVC ile performans optimizasyonu, birçok farklı alanı kapsar. Veritabanı sorgularının optimize edilmesinden önbellekleme stratejilerine, asenkron programlamadan sunucu ayarlarına kadar çeşitli teknikler uygulayarak uygulamalarınızın performansını önemli ölçüde artırabilirsiniz. Bu makalede ele alınan teknikler, ASP.Net Core uygulamalarınızın daha hızlı ve daha verimli çalışmasına yardımcı olacaktır. Performansın yanı sıra, güvenlik önlemlerini de göz önünde bulundurarak dengeli bir yapı oluşturmak önemlidir.