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.