Linearize PDF Nedir? Hızlı Web Görüntülemenin Teknik Arka Planı
5 dk okuma
Aynı boyuttaki iki PDF'ten biri tarayıcıda anında açılıyor, diğeri tamamen inene kadar boş sayfa gösteriyor. Fark, dosyanın içeriğinde değil — nesnelerin dosya içindeki dizilişinde. Bu yazıda PDF'in okuma mekanizmasını, linearizasyonun bu mekanizmayı nasıl tersine çevirdiğini ve ipucu tablolarının ne işe yaradığını anlatıyoruz.
PDF neden sondan okunuyor
Bir PDF dosyasının sonunda şu üç şey bulunur:
startxref
1247893
%%EOF
startxref satırı, çapraz referans tablosunun dosyanın hangi baytında başladığını söyler. Görüntüleyici bir PDF açtığında yaptığı ilk iş dosyanın son birkaç yüz baytını okuyup bu sayıyı bulmaktır.
Sonra o bayta gider ve xref tablosunu okur. Bu tablo, dosyadaki her nesnenin numarasını ve dosyada hangi bayttan başladığını listeler. Ayrıca tablonun ardından bir trailer sözlüğü gelir; burada katalog nesnesinin numarası yazar.
Görüntüleyici artık kataloğu bulabilir. Katalogdan sayfa ağacına, sayfa ağacından ilk sayfa nesnesine, oradan da içerik akışına ve kullanılan kaynaklara ulaşır. Bu kaynaklar dosyanın herhangi bir yerinde olabilir — ilk sayfanın yazı tipi dosyanın ortasında, görseli sonlarında bulunabilir.
Bu tasarımın bir sebebi var: artımlı güncelleme. Bir PDF'e değişiklik yapıldığında tüm dosyayı yeniden yazmak yerine, değişiklikler sona eklenir ve yeni bir xref tablosu yazılır. Yeni tablo, eski tabloya işaret ederek "değişmeyenler için oraya bak" der. Dosya büyür ama işlem hızlıdır ve eski sürüm dosyada durmaya devam eder. Dijital imzaların çalışma mantığı da buna dayanır.
Bedeli ise şu: dosyanın hiçbir kısmını okuyamadan önce sonunu görmeniz gerekir.
Ağ üzerinde bu neden sorun
Yerel diskte dosyanın sonuna atlamak bedava sayılır. Ağ üzerinde durum farklıdır.
Bir tarayıcı sunucudan PDF isterse, sunucu dosyayı baştan göndermeye başlar. Görüntüleyicinin ihtiyacı olan bilgi ise en sonda. Yani ilk sayfayı çizebilmek için pratikte dosyanın tamamının inmesi gerekir.
50 MB'lık bir katalog, 10 Mbps'lik bir bağlantıda yaklaşık 40 saniyede iner. Kullanıcı bu 40 saniye boyunca boş bir sayfaya bakar. Çoğu kullanıcı beklemez.
Linearizasyon dizilişi tersine çeviriyor
Linearize edilmiş bir PDF'in yapısı şöyledir:
| Konum | İçerik |
|---|---|
| Dosya başı | Linearizasyon parametre sözlüğü (/Linearized) |
| Hemen sonrası | İlk sayfanın xref tablosu ve trailer'ı |
| Sonra | İlk sayfanın tüm nesneleri (içerik, yazı tipi, görsel) |
| Sonra | İpucu tabloları (hint tables) |
| Sonra | Diğer sayfaların nesneleri, sayfa sırasına göre |
| Dosya sonu | Ana xref tablosu (uyumluluk için) |
Dosyanın en başındaki parametre sözlüğü şunları söyler: bu dosya linearize edilmiştir, dosyanın toplam uzunluğu şudur, ilk sayfanın nesneleri şu bayta kadar sürer, ipucu tabloları şurada başlar.
Bu sayede görüntüleyici, dosyanın ilk birkaç yüz kilobaytını aldığı anda ilk sayfayı çizmek için gereken her şeye sahip olur. Kullanıcı, indirme devam ederken ilk sayfayı okumaya başlar.
İpucu tabloları: sayfaya atlamayı mümkün kılan yapı
Linearizasyonun ikinci ve belki daha değerli faydası, istenen sayfaya doğrudan atlayabilmektir.
Bunu sağlayan yapı ipucu tablolarıdır. İki tane bulunur:
Sayfa Ofset İpucu Tablosu (Page Offset Hint Table): Her sayfa için, o sayfanın nesnelerinin dosyada hangi bayttan başlayıp kaç bayt sürdüğünü listeler. Kullanıcı 147. sayfaya atladığında görüntüleyici bu tabloya bakar, "147. sayfa 8.234.100 - 8.291.000 baytları arasında" bilgisini alır ve sunucudan sadece o aralığı ister.
Paylaşılan Nesne İpucu Tablosu (Shared Object Hint Table): Birden çok sayfanın ortak kullandığı kaynakları listeler — belge boyunca kullanılan gömülü yazı tipleri, her sayfada tekrarlayan logo gibi. 147. sayfa bunlardan bazılarına ihtiyaç duyuyorsa görüntüleyici onların da bayt aralığını buradan öğrenir.
Sonuç: 500 sayfalık, 80 MB'lık bir dosyada 147. sayfayı görmek için birkaç yüz kilobayt indirmek yeterli olur.
Byte-range: sunucu tarafındaki koşul
Yukarıdaki mekanizma, tarayıcının sunucuya "bu dosyanın 8.234.100 - 8.291.000 arası baytlarını ver" diyebilmesine dayanır. HTTP'de bu, Range başlığıyla yapılır ve sunucunun 206 Partial Content yanıtı vermesi gerekir.
Modern web sunucularının neredeyse tamamı statik dosyalarda bunu destekler ve genellikle varsayılan olarak açıktır. Ama şu durumlarda çalışmaz:
- Dosya dinamik olarak üretiliyorsa (bir uygulama sunucusu PDF'i anlık oluşturuyorsa) genellikle byte-range desteklenmez.
- Yanıt gzip ile sıkıştırılıyorsa bayt aralıkları anlamsızlaşır. PDF'ler zaten kendi içinde sıkıştırılmış olduğu için sunucuda ayrıca gzip uygulamak hem gereksizdir hem de bu sorunu yaratır.
- Bazı CDN veya proxy yapılandırmaları aralık isteklerini geçirmeyebilir.
Bu koşullardan biri geçerliyse linearizasyon yapılmış olsa bile tarayıcı dosyanın tamamını indirmek zorunda kalır ve fayda ortadan kalkar.
Linearizasyon neyi değiştirmez
Bu noktayı netleştirmek gerekiyor çünkü yaygın bir yanlış anlama var:
Dosya boyutu. Linearizasyon hiçbir içeriği atmaz, hiçbir görseli yeniden kodlamaz. İpucu tabloları eklendiği için dosya tipik olarak %1-2 büyür. Küçültme istiyorsanız sıkıştırma gerekir.
Görsel kalite. Hiçbir piksel değişmez.
Metin, yazı tipi, düzen. Hiçbiri etkilenmez.
Yerel açılış hızı. Dosya zaten diskteyse sıralamanın önemi yoktur; linearize dosya yerel olarak daha hızlı açılmaz.
Linearizasyonun bozulduğu anlar
Linearize bir dosya, üzerinde işlem yapıldığında bu özelliğini kaybedebilir:
Artımlı güncelleme yapan her işlem bozar. Bir açıklama eklemek, bir form alanını doldurmak, dijital imza atmak — bunların çoğu değişiklikleri dosyanın sonuna ekler. Dosya hâlâ geçerlidir ama artık görüntüleyicinin güncel durumu öğrenmek için sona bakması gerekir; linearizasyonun vaadi geçersizleşir.
Tam yeniden yazım yapan işlemler de bozar: sıkıştırma, sayfa ekleme/silme, birleştirme, bölme. Bunlar dosyayı sıfırdan üretir ve özel linearize dizilişi korunmaz.
Pratik sonuç: linearizasyon iş akışının son adımı olmalıdır. Sıkıştırın, düzenleyin, imzalayın, ne yapacaksanız yapın — en sonda linearize edip yayınlayın.
Nasıl doğrulanır
Bir dosyanın linearize olup olmadığını anlamanın en basit yolu dosyanın ilk baytlarına bakmaktır. Linearize bir PDF'te ilk nesne şuna benzer:
1 0 obj
<< /Linearized 1 /L 1247893 /O 6 /E 45231 /N 120 /T 1247100 >>
endobj
/Linearized 1 anahtarı doğrudan kanıttır. /N toplam sayfa sayısını, /L dosya uzunluğunu, /O ilk sayfa nesnesinin numarasını verir.
Gerçek koşullarda test etmek için dosyayı sunucuya yükleyip tarayıcının geliştirici araçlarında yavaş bağlantı simülasyonuyla açın. Linearize bir dosyada ilk sayfa, indirme tamamlanmadan görünür.
Özetle
PDF, artımlı güncellemeyi mümkün kılmak için çapraz referans tablosunu dosyanın sonuna koyar; bu, ağ üzerinden okurken tüm dosyayı beklemek anlamına gelir. Linearizasyon dizilişi tersine çevirir: ilk sayfanın her şeyi başa gelir, ardından her sayfanın nerede olduğunu söyleyen ipucu tabloları eklenir. Böylece ilk sayfa hemen görünür ve istenen sayfaya doğrudan atlanabilir — ancak bunun için sunucunun byte-range isteklerini desteklemesi gerekir. İşlem dosya boyutunu küçültmez, kaliteyi değiştirmez ve yerel açılışı hızlandırmaz. Yalnızca web'de yayınlanan büyük dosyalarda anlamlıdır ve dosya üzerinde başka bir işlem yapılırsa bozulduğu için en son adım olarak uygulanmalıdır.
Sıkça Sorulan Sorular
Neden normal bir PDF'te görüntüleyici dosyanın sonuna bakmak zorunda?
Çünkü PDF formatı, nesnelerin dosyanın neresinde olduğunu söyleyen çapraz referans tablosunu (xref) dosyanın sonuna koyar. Bu tasarım tercihi, dosyaya artımlı güncelleme yapılabilmesi içindir: yeni değişiklikler sona eklenir ve yeni bir xref yazılır, eskisi bozulmaz. Bedeli ise okumaya sondan başlamak zorunda olmaktır.
İpucu tablosu (hint table) tam olarak ne içeriyor?
İki ana tablo bulunur. Sayfa Ofset İpucu Tablosu, her sayfanın nesnelerinin dosyanın hangi bayt aralığında olduğunu söyler. Paylaşılan Nesne İpucu Tablosu ise birden çok sayfanın ortak kullandığı kaynakların (yazı tipleri, tekrar eden görseller) nerede olduğunu belirtir. Görüntüleyici bir sayfaya atlarken bu iki tabloya bakıp yalnızca gereken bayt aralıklarını ister.
Linearize dosya normal görüntüleyicilerde de açılır mı?
Evet, tamamen açılır. Linearizasyon standardın bir parçasıdır ve linearize bir dosya aynı zamanda geçerli bir normal PDF'tir; dosyanın sonunda yine bir xref tablosu bulunur. Linearizasyonu anlamayan bir görüntüleyici dosyayı klasik yöntemle okur ve hiçbir sorun yaşamaz. Fayda kaybolur ama uyumluluk bozulmaz.
Artımlı güncelleme linearizasyonu neden bozuyor?
Çünkü linearizasyonun temel vaadi, ilk sayfayı çizmek için gerekli her şeyin dosyanın başında bulunmasıdır. Artımlı güncelleme değişiklikleri dosyanın sonuna ekler ve yeni bir xref yazar; artık görüntüleyicinin güncel durumu bilmesi için sona bakması gerekir. Dosya hâlâ geçerlidir ama hızlı web görüntüleme garantisi geçersizleşir.
Bu konuyu Web İçin Optimize Et aracıyla hemen deneyin.
Web İçin Optimize Et aracını dene