sample response header
💻 Bilgisayar

Gzip Sıkıştırması ile Sitenizi Hızlandırın

Gzip bir çeşit sıkıştırma algoritmasıdır. Web açısından baktığımızda gzip, özellikle HTML, CSS ve JS gibi metin tabanlı dosyalarda çok ciddi derecede sıkıştırma sağlayan bir sıkıştırma yöntemidir. Birçok web sunucusu ve güncel tüm tarayıcılar (ile web robotları) gzip sıkıştırmasını desteklemektedir.

Sıkıştırma Konusunda Anlaşmak

Siz bir web sayfasını açmak üzere tarayıcınıza tıkladığınızda, arkada bir çok şey olur. Bunlardan biri de, isteğin hangi formatta olacağına karar verilmesidir. Bir web sayfası açmaya çalıştığınızda tarayıcınız sizin için aşağıdakine benzer bir bilgi gönderir:

(Request Header)
sample-request-header

Burada gönderdiğiniz bilgilerden Accept: */* ve Accept-Encoding: gzip,deflate satırlarına dikkatinizi çekmek istiyorum. Accept, istemcinin (yani tarayıcınızın) kabul ettiği MIME (Multipurpose Internet Mail Extensions) tiplerini, Accept-Encoding ise kabul ettiği kodlama biçimlerini gösterir.

Tarayıcınız sizin adınıza gzip ve deflate algoritmaları ile sıkıştırılmış verileri kabul ettiğini gönderiyor. Karşıdaki sunucu da (eğer bu sıkıştırmayı destekliyorsa) size verileri sıkıştırarak gönderebilir. Sunucu, veri aktarımından önce aşağıdakine benzer bir bilgi gönderir:

(Response Header)
sample-response-header

Burada Content-Type ve Content-Encoding satırlarına dikkat etmenizi istiyorum. Content-Type ile dönen verinin MIME tipinin text/html olduğu ve bu dosyanın UTF-8 ile kodlandığı belirtilmiş ve ardından Content-Encoding ile de gelen verinin hangi algoritmayla sıkıştırıldığı gönderilmiştir.

Anlaştık Sanırım

Yukarıdaki kısımda görülebileceği üzere, tarayıcı hangi tipleri algılayabildiğini göndermiş, sunucu destekliyorsa cevabını bu algoritmalardan biriyle sıkıştırarak göndermiş ve fiber optik kablolar daha az veri taşıdığı için mutlu olmuşlardır. Siteniz daha hızlı açıldığından okurlarınızda kocaman bir gülümseme oluşurken, siz de ay sonunda bandwidth kullanımınızın azaldığını görünce onlara katılırsınız.

Ne Kadar Sıkıştırıyor?

Gzip, özellikle metinlerde etkili bir algoritmadır. Aynı zamanda sıkıştırma/açma hızı yüksek bir algoritma olduğundan sıkça tercih edilir. Ben veritabanı yedeklerimi sunucumdan gzip ile sıkıştırılmış olarak çekiyorum. 30 Megabaytlık bir veri tabanını (SQL, metin formatında) 7 MB’a sıkıştırdığını kendim biliyorum. Web’de CSS, HTML ve JavaScript dosyalarında bu kadar sık kullanışmasının nedeni de tam olarak bu performans. =)

Nasıl Aktifleştiririm?

Sunucunuzda gzip sıkıştırması kullanmak için pek çok yöntem vardır. Bu yazıda Apache ve uyumlu sunucular (mesela Litespeed) için, .htaccess dosyaları ile bu özelliği açmak anlatılacak.

Sitenizin kök klasöründeki .htaccess dosyasını açın. (Yoksa kendiniz yaratın.) Daha sonra gzip sıkıştırmasını açmak için bu dosyanın en üstüne aşağıdaki kodu kopyalayın ve dosyayı kaydedin.


SetOutputFilter DEFLATE

Bu kod, sitenizdeki js ve css uzantılı dosyalar için gzip sıkıştırmasını açacaktır. Yukarıdaki kodda neden php uzantısının neden olmadığını merak etmişsinizdir muhtemelen. Bu dosyaların çıktısı PHP ile dinamik olarak oluşturulduğu için, sıkıştırılması PHP da ile ayarlanır. Bununla ilgili bilgi almak için şuraya ışınlanabilirsiniz. PHP’de ob_gzhandler kullanımı artık tavsiye edilmemektedir.

Yukarıdaki kodu .htaccess dosyanıza ekledikten sonra 500 Internal Server Error hatası alıyorsanız ya da bir gariplik olduysa sunucnuzda mod_deflate veya
mod_ext_filter eklentisi yüklü olmayabilir. Bu durumda sıkıştırmayı (en azından benim anlattığım yöntemle) yapamazsınız. Hosting şirketinizin başının etini yemeniz şiddetle önerilir.

Daha da Gelmem

Dilerseniz aşağıdaki .htaccess kodlarını da ekleyerek sitenizde ufak birkaç iyileştirme daha yapabilirsiniz:


ExpiresActive On
ExpiresDefault A604800
Header append Cache-Control "public"

Bu kod, aksi belirtilmediği halde gönderilen bilginin tarayıcı tarafından ön belleğe atılmasını ve bir hafta geçerli olmasını sağlar. (Böylece fotoğraflar ve görseller her seferinde sunucunuzdan yüklenmek zorunda kalmaz.)


AddDefaultCharset UTF-8
DefaultLanguage tr-TR

Bu kod, belirtilen uzantılı dosyalar için aksi belirtilmediği halde varsayılan dilin Türkçe ve karakter kodlamasının UTF-8 olmasını sağlar. (Bunlar HTTP Header bilgileridir, HTML Head meta taglarını siz ayarlamalısınız. Tarayıcılar HTML Meta Charset ile HTTP Header Charset uyuşmadığı takdirde hangisini kullanacakları konusunda farklı tepkiler verirler.)

Bitirirken

Bugünlük bu kadar. İyi geceler efendim.

👋 🚨 Yeni yazılardan haberdar olmak ister misiniz? 👇

Gzip Sıkıştırması ile Sitenizi Hızlandırın 66 yorum aldı.

  1. Dostum çok teşekkürler, wordpress kullanıyorum ve bu aralar kafamı kurcalayan bir meseleydi. Çok teşekkür ederim.

  2. Hocam super cache eklentisi ile gzip hakkında da bir bilginiz varmıdır? Ben eklentiyi kurup ayarlarından gzip seçtiğimde performans artıyor (pagespeed skoru 99) fakat chrome ve firefox'da sorun olmazken IE tarayıcısı sayfa yerine gzip içeriği olan harf ve rakamlardan başka bir şey göstermiyor. Ziyaretçilerin en az %40'ı IE kullandığı içinde eklentinin bu özelliğini kapatmak zorunda kaldım.

    1. Buna benzer bir sorun ben de yaşamıştım ama işin kötüsü nasıl çözdüğümü hatırlamıyorum. Ancak size fikir olması açısından kontrol edilecek şeyleri söyleyeyim:

      1. Sayfa iki defa gziplenmeye çalışılıyor olabilir. Yani aslında sayfa hatalı kodlanmış, ancak tarayıcıların başarısı dolayısıyla doğru görüntüleniyor olabilir IE diğerlerine göre daha nazik.
      2. Daha olası bir ihtimal, sıkıştırma doğru ancak bilgisi yanlış olabilir. HTTP Headerlarında gelen bilginin sıkışık olduğunun ve tipinin text/html olduğunun doğru bir şekilde belirtilmesi çok önemli. Internet explorer çok büyük bir ihtimalle eksik bir headerdan dolayı gelen veriyi sıkıştırılmış ve açılıp gösterilmesi gereken web sayfasından çok, doğrudan gösterilecek bir şey gibi anlıyor.

  3. Derli toplu ve net anlatımlar her zaman hoşuma gitmiştir. Paylaşımlarınız için teşekkürler.

  4. Benim bir komb şatış sitem var. Burada Gzipi aktif yapmak istiyorum ancak bu Gzip olayını windows hostinglerde yapmak mümkün müdür? Sadece linux hostlar için mi geçerlidir?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir