GZIP nedir, GZIP sıkıştırma nasıl yapılır?

GZIP Sıkıştırma, sitenizi hızlandırmak ve bant genişliği kurtarmak için basit ve etkin bir yoldur. Sitenizdeki javascript dosyalarını GZIP sıkıştırma yöntemi ile optimize ederek sitenizi oldukça hızlı bir hale getirebilirsiniz. Çoğu modern tarayıcı GZIP sıkıştırmayı destekler.

Ayrıca Google ve Yahoo’da gezip sıkıştırma kullanıyor. Modern bir tarayıcının ihtiyacı modern web içerikleri ve modern bir site hızı, işte gzip kodlaması da budur. Hadi nasıl ayarlayacağımıza bakalım.

Gzip sıkıştırma nedir?

Başlamadan önce içerik içerik kodlamasının ne olduğunu açıklamalıyım. Örneğin https://www.kartal24.com/robots.txt gibi bir dosyayı talep ettiğinizde tarayıcınız web sunucusu ile iletişim kurar.

Sistem çalışıyor olsa da verimli değildir. Her html, table ve div etiketi bir kapanış etiketine sahiptir ve bu çoğunlukla aynıdır. Kelimeler belge boyunca tekrarlanır. Peki bir dosya çok büyükse ne yapabiliriz? Sıkıştırmak!

Eğer yalın bir index.html dosyası yerine bir .zip dosyasını (index.html.zip) tarayıcıya gönderebilirsek bant genişliği ve indirme zamanını kısabiliriz. Tarayıcı sıkıştırılmış dosyayı indirebilir ve onu açıp kullanıcıya sunabilir. Kullanıcı da sayfa çabuk açıldığı için mutlu olur. Tarayıcı ile sunucu iletişimi aşağıdaki gibi olabilir:

Formül çok basit: daha küçük dosya = daha hızlı indirme = mutlu kullanıcı. İnanmıyor musunuz? Yahoo’nun ana sayfası 442kb iken sıkıştırmadan sonra 19kb olarak geliyor.

yahoo-gzip

Gzip sıkıştırma nasıl yapılır?

Sıkıştırılmış dosyanın tarayıcıda gösterilmesi iki aşamada tamamlanan bir anlaşmadır.

  • Tarayıcı bir başlık göndererek hangi sıkıştırılmış içeriği (gzip ve deflate, iki sıkıştırma düzeni) kabul ettiğini söyler: Accept-Encoding: gzip, deflate
  • Sunucu eğer içerik gerçekten sıkıştırılmışsa bir cevap gönderir: Content-Encoding: gzip

Eğr sunucu içerik sıkıştırma cevap başlığı göndermezse, dosya sıkıştırılmamış anlamına gelir (çoğu sunucuda varsayılandır). “Accept-encoding” başlığı tarayıcıdan yapılan bir istektir, bir emir değildir. Eğer sunucu sıkıştırılmış içerikle geri dönmezse tarayıcı sıkıştırılmamış büyük haliyle yetinmek zorunda kalır.

Sunucuda Gzip ayarları nasıl yapılır?

İyi haber şu, tarayıcıyı kontrol edemeyiz ama onun yerine Accept-encoding: gzip, deflate başlık yollar veya yollamayız. Bizim işimiz sunucuyu ayarlamak, eğer tarayıcı istiyorsa sıkıştırılmış içerik sunmak. Böylece bant genişliği kurtarıp mutlu kullanıcılara sahip olmak.

Apache’de, sıkıştırmayı etkinleştirmek için aşağıdaki kodu .htaccess dosyasına ekleyin:

1
# Compress HTML, CSS, JavaScript, Text, XML and fonts
2
AddOutputFilterByType DEFLATE application/javascript
3
AddOutputFilterByType DEFLATE application/rss+xml
4
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
5
AddOutputFilterByType DEFLATE application/x-font
6
AddOutputFilterByType DEFLATE application/x-font-opentype
7
AddOutputFilterByType DEFLATE application/x-font-otf
8
AddOutputFilterByType DEFLATE application/x-font-truetype
9
AddOutputFilterByType DEFLATE application/x-font-ttf
10
AddOutputFilterByType DEFLATE application/x-javascript
11
AddOutputFilterByType DEFLATE application/xhtml+xml
12
AddOutputFilterByType DEFLATE application/xml
13
AddOutputFilterByType DEFLATE font/opentype
14
AddOutputFilterByType DEFLATE font/otf
15
AddOutputFilterByType DEFLATE font/ttf
16
AddOutputFilterByType DEFLATE image/svg+xml
17
AddOutputFilterByType DEFLATE image/x-icon
18
AddOutputFilterByType DEFLATE text/css
19
AddOutputFilterByType DEFLATE text/html
20
AddOutputFilterByType DEFLATE text/javascript
21
AddOutputFilterByType DEFLATE text/plain
22
AddOutputFilterByType DEFLATE text/xml
23
24
# Remove browser bugs (only needed for really old browsers)
25
BrowserMatch ^Mozilla/4 gzip-only-text/html
26
BrowserMatch ^Mozilla/4\.0[678] no-gzip
27
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
28
Header append Vary User-Agent

Apache mevcutta iki sıkıştırma seçeneğine sahiptir.

  • mod_deflate varsayılandır ve ayarlaması kolaydır.
  • mod_gzip daha güçlü görünür: önden sıkıştırma yapabilirsiniz.

Her iki durumda da, eğer tarayıcı “Accept-encoding” başlığı gönderdiyse Apache kontrol ederek dosyanın sıkıştırılmış veya normal versiyonu ile dönüş yapar. Her neyse bazı eski tarayıcılar bazı sorunlara gebedir ve bunun için bazı özel direktifler vardır. Bunları da ekleyebilirsiniz.

Eğer .htaccess dosyanızı düzenleyemiyorsanız, PHP kullanarak sıkıştırılmış içerik oluşturabilirsiniz. HTML dosyanıza bir .php ek ekleyerek dosyanın en üstüne alttaki kodu ekleyin:

PHP’de !-- ve !-- çizgileri kaldırarak alttaki kodu kullanabilirsiniz:

1
<!--?php if (substr_count($_SERVER[‘HTTP_ACCEPT_ENCODING’], ‘gzip’)) ob_start(“ob_gzhandler”); else ob_start(); ?-->

Böylece “Accept-encoding” başlığını kontrol edip dosyanın bir sıkıştırılmış sürümünü sunarız (yoksa da durumda normal sürümü). Eğer yapabiliyorsanız bu işlem için Apache kullanın. Tek tek her dosyada uğraşmak gerçekten kötü olur.

Gzip sıkıştırma kontrol etmek

Sunucunuzu ayarladıysanız sıkıştırmanın doğru çalıştığını kontrol edebilirsiniz.

  • Online: online gzip test sitesini kullanarak kontrol edin.
  • Tarayıcıda: Web Developer Toolbar > Information > View Document Size (yukarıda Yahoo için yaptığım gibi) kısmına bakarak sayfanın sıkıştırılmış olup olmadığına bakın.
  • Headere bakın: Live HTTP Headers kullanarak kontrol edin. “Content-encoding: gzip” şeklinde görülmeli.

Gzip hakkında dikkat edilmesi gerekenler

Ne kadar heyecan verici görünse de, HTTP sıkıştırma tamamen müthiş değildir. İşte bakmanız gerekenler:

  • Eski tarayıcılar: Evet bazı tarayıcıların Gzip ile ilgili sorunları olabilir (sıkıştırılmış dosyayı kabul ettiklerini söyleyip aslında bunu yapamazlar). Eğer ziaretçilerinizin çoğu Windows 95 üzerinde Netscape 1.0 kullanıyorsa, HTTP sıkıştırma kullanmamalısınız. Apache mod_deflate eski tarayıcılar için daha uygundur.
  • Zaten sıkıştırılmış içerik: Çoğu resim, video ya da mp3 zaten sıkıştırılmıştır. Onları tekrar sıkıştırmak için zaman harcamayın. Sadece 3 büyükler (HTML, CSS ve Javascript) için sıkıştırma yapmak daha hızlıdır ve doğrudur.
  • CPU: Sıkıştırılmış içerikler CPU ve bant genişliği kurtarır. Statik içerikleri önceden sıkıştırmak daha akıllıcadır.

Sıkıştırmayı etkinleştirmek sitenizi hızlandırmak için en önemli şeydir. Hiç düşünmeyin ve zaman kaybetmeden bunu yapın.