gzip (DEFLATE)
gzip'in metni nasıl küçülttüğünü görün: tekrarlar kısa kopyalara dönüşür, Huffman kodları da sık geçen sembollere daha az bit verir.
- 32 KB
- 3-258 bayt
- en fazla 15 bit
- gzip çerçevesi 18 bayt
Pencere: sıkıştırıcının bir tekrar için ne kadar geriye bakabileceği. gzip'te 32 KB, Brotli'de 16 MB'a kadar.
Kopya: "şu kadar geriden şu kadar karakter al" anlamına gelen bir uzunluk ve bir mesafe. Ürettiği metinle örtüşebilir.
Huffman kodu: her sembol için bir bit dizisi; sık geçen sembollerde daha kısadır ve en nadir iki sembolü tekrar tekrar birleştiren bir ağaçtan kurulur.
Bu sayfadaki diğer terimler
- Literal: olduğu gibi yazılan bir karakter, çünkü konumunda 3 veya daha fazla karakterlik bir tekrar başlamıyor.
- Önek içermeyen: hiçbir kod başka bir kodun başlangıcı değildir, bu yüzden bir kod akışı ayırıcı olmadan geri okunabilir.
Şunu deneyin: Aynı harfi birçok kez yazın. Mesafesi 1 olan tek bir kopya hepsini kapsar, çünkü bir kopya ürettiği metinle örtüşebilir.
Nasıl çalışır
gzip, DEFLATE'i iki aşamada çalıştırır. LZ77 metni baştan sona dolaşır ve her konumda son 32 KB içinde daha önce geçmiş en uzun bayt dizisini arar; bu baytları tekrar yazmak yerine bir çift yazar: kaç bayt kopyalanacağı (3-258) ve bunların ne kadar geride olduğu. Geriye kalan her şey, yani literaller ve bu çiftler, ardından Huffman kodlarıyla yazılır: sık geçen semboller kısa, nadir olanlar uzun kod alır. gzip sonucu 10 baytlık bir başlık ile CRC-32 sağlama toplamı içeren 8 baytlık bir kapanışla sarar.
Ne zaman iyi bir seçimdir
gzip kendini tekrar eden metni sıkıştırır: HTML, CSS, JavaScript, JSON, loglar, CSV. Her tarayıcı ve sunucu onu anlar, her seviyede hızlıdır ve yanıtları anında sıkıştırmak için güvenli varsayılan seçimdir. JPEG, PNG, WOFF2 veya ZIP gibi zaten sıkıştırılmış verilerde tekrar kalmamıştır, bu yüzden gzip yalnızca kendi çerçevesini ekler.
Kendi metninizde
Aynı iki aşama, daha uzun bir metinde gerçek gzip (seviye 6) tarafından yapılır. Kendi metninizi yapıştırın veya Gzip ve Brotli Sıkıştırma aracından birini getirin.