Site İçeriğini GZip İle Sıkıştırarak Site Performansını Arttırmak

23. Şubat 2014

Günümüzde web uygulaması geliştirirken, web uygulamasının hızlı açılması dikkate edilmesi gereken en önemli kriterlerden biridir. Anasayfanın bir kaç saniye geç açılması binlerce potansiyel ziyaretçinin rakip uygulamalara gitmesine sebep olabilir. Hızlı gelen içeriği ziyaretçilerin sevdiği kadar arama motorları da sever. Bir web uygulamasının yavaş çalışmasına pek çok sebep var iken, her bir sebebe göre ayrı çözümler vardır. Bu yazımda bu sebeplerden biri olan yoğun içeriğe dikkat çekmeye çalışarak çözüm yöntemi olarak GZip üzerinde durmaya çalışacağım.

GZip ile Sıkıştırılmamış Bir Site

Büyük bir dosyayı bir e-postaya ekleyeceğimiz zaman alacağımız ilk aksiyonlardan biri dosyayı sıkıştırmak olacağı gibi, yoğun içerikli bir siteyi de ziyaretçilerimize sunacağımız zaman da aynı aksiyonu almalıyız. Sıkıştırılmış bir dosyayı e-postamıza eklemek bizim bandwidth ve zamanımızdan tasarruf sağladığı gibi aynı zamanda alıcının da dosyayı indirme zamanı düşeceğinden onun da zamanını ve bandwidth'ini tasrarruflu kullanmış oluruz. Aynı mantık web uygulamamız için de geçerli. İçeriğin sıkıştırılması ile hem sunucu kaynaklarını hem de ziyaretçilerimizin kaynaklarını tasarruflu kullanarak her iki tarafın da kazanmasını sağlıyoruz.

checkgzipcompression.com gibi bir site'de GZip ile ziplanmamiş bir siteyi incelersek, sitenin sıkıştırılmamış hali ile neler kaçırdığımızı rahatça görebiliriz. Aşağıdaki örneğimizde sitemiz %80 oranında sıkıştırılabilecek iken hiç bir aksiyon alınmadığını görüyoruz.

Aynı siteyi Google Chrome Geliştirici araçları ile inceleyelim. F12'ye basark geliştirici araçlarını açıp Network tabına gelip Response altındaki sunucu başlıklarını incelersek siteminizin içeriğinin boyutu ve sıkıştırılma kullanılıp kullanılmadığını görebiliriz. Şayet sunucu içeriği sıkıştırmış olsaydı, burada Content-Encoding diye bir başlık görecektik. Site ziyaretçisi olarak kullandığımız tarayıcılar ziyeret ettiğimiz siteye bir talep gönderdiklerinde site içeriğini nasıl kabul edebilecekleri konusunda bazı bilgileri header bilgileri ile gönderirler. Accept-encoding header'ı ile tarayıcılar hangi sıkıştırma formatlarını (gzip, deflate gibi) kabul edebildiklerini sunucuya gönderirler. Sunucu bu header bilgisine göre eğer sıkıştırma formatlarından biri aktif ise içeriği sıkıştırarak ziyaretçiye gönderir. 

 

GZip İle Sıkıştırılmış Bir Site

Ziyaretçinin tarayıcısının sıkıştırma formatlarını kabul etmesi durumunda web sunucusu içeriği, tanımı yapılmış bir formatta sıkıştırıp ziyaretçiye gönderir. Ziyaretçinin tarayıcısı sıkıştırılmış içeriği açarak render eder. GZip sıkıştırılmış bir siteyi checkgzipcompression.com da incelersek aşağıdaki gibi yüksek oranda bir sıkıştırma ortalaması ile karşılaşabiliriz. HTML, kendini tekrar eden bir çok etiketten oluşan bir markup dili olduğu için sıkıştırma algoritmaları HTML üzerinde çok başarılı sonuç vermektedir.

Şayet Google developer tools ile aynı siteyi incelersek sıkıştırılmış içeriğin ve sıkıştırma formatının tarayıcıya nasıl bildirildiği konusunda fikir sahibi olabiliriz : 

 

IIS üzerinde GZip İçerik Sıkıştırma Formatının Açılması

Şuana kadar sıkıştırma formatlarının nasıl işlediğini, tarayıcı ile web sunucusunun uygun format üzerinde nasıl anlaştığını anlatmaya çalıştım. Peki GZip sıkıştırma formatını web sunucumuz üzerinde aktif hale getirmek için ne yapmalıyız ?

IIS üzerinde sitemizi bulup seçtiğimiz takdirde sitemiz ile alakalı pek çok ayara sağ taraftaki panelden erişebiliyoruz. Bu konfigurasyon ayarları arasında Sıkıştırma / Compression'ı seçersek yukarıdaki gibi bir ekran ile karşılaşırız. Bu iki ayarı açmamız halinde sitemizde sıkıştırma formatlarını aktif hale getirmiş oluyoruz.

Peki Web sunucumuzun IIS'ine direk erişimimiz yok ise sıkıştırma formatlarını nasıl aktif hale getiririz ? Bu sorunun ve pek çok konfigurasyon sorusunun çözümü web.config dosyasında saklı. <system.webServer> etiketi altında tanımlayacağımız urlCompression etiketi sayesinde IIS'e direk erişmeden sıkıştırma formatlarını aktif hale getirebiliriz : 

<system.webServer>

    <urlCompression doStaticCompression="true" doDynamicCompression="true" />

</system.webServer>

Ufak bir ayar ile içeriğimizde %70-80 oranında sıkıştırma sağlayarak bandwidth tasarrufu sağlayan sıkıştırma ayarları ile web uygulamalarımızı daha hızlı hale getirebiliriz. Her talepte içerik yeniden sıkıştırıldığı için sunucunun CPU kaynağı kullanılıyor. Bu sebepten de paylaşımlı sitelerde default ayarda kapalı olan sıkıştırma formatları çok büyük boyutta dinamik içeriğe sahip sitelerde tavsiye edilmiyor. 50 KB - 100KB arası büyüklüğe sahip içerikler için en iyi sonucu verdiği belirtiliyor.

, ,