Ein großes Dokument, dessen erste Seite sofort erscheint
Sie senden einem Kunden einen Katalog mit 400 Seiten. Er klickt auf den Link, und mehrere Sekunden lang geschieht nichts. Er wartet nicht auf Seite 400 — er wollte nur Seite eins ansehen. Ein Dokument lässt sich so schreiben, dass Seite eins fast sofort erscheint und der Rest dahinter weiter ankommt: dasselbe Dokument, in anderer Reihenfolge geschrieben.
Was geschieht, wenn jemand auf einen Link zu einem PDF klickt
Eine PDF-Datei wird von hinten nach vorn geschrieben. Alles, woraus das Dokument besteht, kommt zuerst, und das Verzeichnis, das angibt, wo jedes Stück steht, kommt zuletzt, ganz am Ende der Datei.
Auf einer Platte ist das in Ordnung: Die Anzeigesoftware springt zum Ende, liest das Verzeichnis und geht direkt zu den Stücken, die sie braucht. Über das Internet nicht. Um ein Verzeichnis zu lesen, das am Ende steht, muss man das Ende empfangen. Um das Ende zu empfangen, muss man alles davor empfangen. Die Person wartet also auf 400 Seiten, um eine anzusehen.
Andersherum geschrieben, beginnt die Datei mit Seite eins, allem, was Seite eins braucht, und einem kleinen Index, der sagt, wo jede andere Seite beginnt. Die Anzeigesoftware zeigt Seite eins und holt den Rest, während der Mensch mit Lesen beschäftigt ist. Springen Sie zu Seite fünfzig, fragt sie nur nach Seite fünfzig statt nach dem ganzen Buch.
Sonst ändert sich nichts. Dasselbe Dokument, dieselben Seiten, und wer es von seiner eigenen Maschine öffnet, sieht überhaupt keinen Unterschied.
Wie das heißt
Das heißt, ein PDF zu linearisieren, und eine so geschriebene Datei ist ein linearisiertes PDF — in Anforderungslisten begegnet es einem meist in der amerikanischen Schreibweise linearized. Manche Anzeigesoftware nennt dasselbe Schnelle Webanzeige und zeigt es als Ja oder Nein in den Eigenschaften des Dokuments.
Unsere Engine schreibt linearisierte PDF. Es gibt eine Option zum Einschalten, und sonst ändert sich nichts am Dokument.
Detail — 20 815 Bytes statt 1 201 870
Ein Roman, vollständig enthalten, zweimal geschrieben: einmal auf gewöhnliche Weise, einmal mit der ersten Seite zuerst. Sonst unterscheidet sich nichts zwischen den beiden Dateien.
- 1 201 870 Bytes — muss ankommen, bevor Seite eins gezeigt werden kann, bei der auf gewöhnliche Weise geschriebenen Datei — und das ist alles.
- 20 815 Bytes — bei der mit der ersten Seite zuerst geschriebenen Datei.
- 1 181 055 Bytes — nicht mehr erwartet.
Die Anzeigesoftware zeigt Seite eins, sobald der Anfang der Datei angekommen ist, statt auf alles zu warten.
Die Zahlen werden aus den beiden Dateien selbst abgelesen, nicht eingetippt. Die herunterladbare Datei ist dieses Buch mit der ersten Seite zuerst geschrieben — 357 Seiten, die letzte mit diesen drei Zahlen —, und gemessen wird das Buch ohne diese letzte Seite.
Die beiden Dateien ansehen und das Programm, das sie geschrieben hat
Wann es keinen Unterschied macht
Gut zu wissen, bevor Sie es einschalten. Der Gewinn ist nur spürbar, wenn das Dokument beim Ankommen gelesen wird, und das setzt zwei Bedingungen voraus.
- Der Server, der die Datei ausliefert, muss auf Anfrage einen Ausschnitt davon senden können. Die meisten können das von Haus aus. Ein Server, der immer nur ganze Dateien sendet, liefert die ganze Datei, und die Anzeigesoftware wartet wie vorher darauf.
- Die Anzeigesoftware muss es nutzen. Die in Chrome, Firefox und Edge eingebauten tun es. Adobe Acrobat Reader ebenfalls. Manche anderen lesen die Datei auf gewöhnliche Weise — und verlieren dabei überhaupt nichts, denn das Dokument ist dasselbe Dokument.
Und es gibt zwei Dokumente, von denen man es gar nicht verlangen kann, was die Engine klar sagt, statt eine Datei zu schreiben, die sich nicht öffnen ließe: eines, das durch ein Passwort geschützt ist, und eines, dessen Objekte zusammengepackt sind, um Platz zu sparen. Beides wird unten unter Technisch erklärt.
Und es bewirkt überhaupt nichts in den Fällen, in denen niemand wartet: eine an eine E-Mail angehängte Datei, eine in einen gemeinsamen Ordner kopierte Datei, eine vollständig heruntergeladene und danach geöffnete Datei. In all diesen Fällen ist das Dokument bereits angekommen, bevor jemand hinsieht.
Also: Wenn Ihre Dokumente über einen Link geöffnet werden, schalten Sie es ein. Wenn sie als Anhänge versendet werden, ändert es nichts. So oder so erhöht es den Preis nicht: Es ist eine Option der Engine, nichts, was daneben verkauft wird.
Technisch
Linearisierung im Sinne von ISO 32000, Abschnitt 7.5.8: ein Querverweisabschnitt für die erste Seite und das Linearisierungs-Parameter-Dictionary am Anfang der Datei, unmittelbar danach Seite eins und ihre Ressourcen, dann die übrigen Objekte, dann der Hauptquerverweisabschnitt. Die Hinweistabellen — der Hinweisstream für gemeinsame Objekte und der Hinweisstream für Seiten-Offsets — lassen die Anzeigesoftware den Bytebereich jeder Seite ermitteln und ihn in einer einzigen Range-Anfrage anfordern.
Die Zahl oben ist der Eintrag /E des Parameter-Dictionarys, der den Offset des Endes der ersten Seite angibt: Alles davor muss die Anzeigesoftware haben, bevor sie eine Seite zeigt. Eine auf gewöhnliche Weise geschriebene Datei gibt nichts dergleichen an, die Antwort für sie ist also ihre eigene Länge. Deshalb sind die beiden Zahlen vergleichbar — eine Messung, auf zwei Schreibweisen eines Dokuments angewendet.
Was Sie auf Ihrer Seite prüfen sollten: Der Server muss Accept-Ranges: bytes antworten und Range-Anfragen mit einem 206 beantworten, auf genau der Route, die die Dokumente ausliefert — ein vorgeschalteter Frontend-Server, eine während der Übertragung angewendete Kompressionsschicht oder ein Auslieferungsnetz, das den Body umwandeln soll, verwandeln Bereichsanfragen jeweils stillschweigend wieder in Übertragungen der ganzen Datei. Inhaltskodierte Antworten sind die übliche Ursache: Ein unter Content-Encoding: gzip ausgeliefertes PDF lässt sich nicht sinnvoll bereichsweise anfordern, und ein PDF ist innen bereits komprimiert, es unkomprimiert auszuliefern ist also ohnehin richtig.
Es lässt sich mit Tagging, PDF/A- und PDF/UA-Konformität und Signieren kombinieren. Es wird zuletzt geschrieben, über das fertige Dokument, und ändert daher nie, was die Seiten sagen.
Zwei Dinge lassen sich nicht zugleich verlangen, und die Engine sagt das, statt etwas zu schreiben, das sich nicht öffnen ließe: ein in Objektstreams gepacktes Dokument, weil ein Objekt in einem Stream nirgends für sich steht und der Kopf der Datei sagen muss, wo jedes ist; und ein gesperrtes Dokument, weil das, was ein Objekt sperrt, aus der Nummer berechnet wird, die es trägt, und das Schreiben der ersten Seite zuerst genau diese Nummern ändert.
Wo Sie als Nächstes nachsehen
Das gemessene Buch und sein Programm Was ein linearisiertes PDF ist, im Glossar Die Bibliothek wechseln, die Ihre Dokumente schreibt Die Engine in Ihrem eigenen Programm