aboutsummaryrefslogtreecommitdiff
path: root/README.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'README.adoc')
-rw-r--r--README.adoc74
1 files changed, 56 insertions, 18 deletions
diff --git a/README.adoc b/README.adoc
index 996a0be..ee363d4 100644
--- a/README.adoc
+++ b/README.adoc
@@ -111,7 +111,7 @@ https://matthias.benkard.de/aendggner/.
(2) Fortlaufende Quelltextquelle ist
https://gerrit.benkard.de/plugins/gitiles/aendggner. Die jeweils betriebene
Fassung liegt der Browserfassung überdies als `aendggner-quelltext.tar.gz` bei
-(§ 15 Absatz 4).
+(§ 15 Absatz 5).
(3) Das Erzeugnis steht unter der GNU Affero General Public License, Fassung 3;
der Lizenztext ist der Datei `COPYING` zu entnehmen.
@@ -486,15 +486,42 @@ JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package
----
(4) Ergebnis ist `target/web/` mit `index.html`, `app.js`, `worker.js`,
-`style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 24 MB,
-komprimiert etwa 7 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar:
+`style.css`, `favicon.svg`, `aendggner.js` und `aendggner.js.wasm` (rund 17 MB,
+komprimiert etwa 5 MB). Das Verzeichnis ist so, wie es dasteht, auslieferbar:
`deploy/webpaket.sh` läuft am Ende desselben Befehls, wirft den mehrere hundert
-Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, legt den Quelltext
-der gebauten Fassung als `aendggner-quelltext.tar.gz` samt
-`quelltext-fassung.txt` bei und komprimiert die großen Dateien nach `.gz` und
-`.br` vor.
-
-(5) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung
+Megabyte großen Textzwischenschritt `aendggner.js.wat` fort, schickt das Modul
+durch `wasm-opt -Oz` und legt den Quelltext der gebauten Fassung als
+`aendggner-quelltext.tar.gz` samt `quelltext-fassung.txt` bei.
+
+(5) Die Größe des Moduls beruht auf vier Vorkehrungen; wer eine davon zurücknimmt,
+handelt sich die Megabyte wieder ein:
+
+1. `-Os` beim Übersetzen statt der auf Durchsatz gerichteten Voreinstellung;
+2. kein Picocli-Annotationsprozessor im Profil `wasm`. Er meldete die
+ Befehlszeilenklasse zur Reflexion an, worauf die Erreichbarkeitsanalyse die
+ gesamte Befehlszeilenfassung ins Browser-Image zog, die dort niemand aufruft;
+3. ein enger Ressourcen-Glob in `reachability-metadata.json`. Das frühere
+ `org/apache/fontbox/**` bettete 3,3 MB CJK-CMaps, `Scripts.txt` und — weil
+ `**` auch Klassendateien trifft — 0,7 MB `.class`-Dateien ein, von denen
+ deutsche Gesetzes-PDFs nichts brauchen. Geblieben sind die beiden
+ Identity-CMaps; `org/apache/pdfbox/resources/**` bleibt vollständig, damit die
+ Breitenberechnung bei nicht eingebetteten Schriften unangetastet ist;
+4. `wasm-opt -Oz` als Nachlauf. Die zugelassenen Wasm-Merkmale sind in
+ `webpaket.sh` einzeln aufgezählt und nicht als `--all-features` erteilt: Sonst
+ nutzt Binaryen auch Vorschläge, die noch kein Browser annimmt, und das Modul
+ scheitert erst beim Instanziieren.
+
+(6) Im Quelltextarchiv fehlt der Beispielkorpus; `.gitattributes` nimmt
+`src/test/resources/sampledata` von `git archive` aus. Es sind Gesetzes- und
+Drucksachentexte fremder Urheberschaft, an denen allein die Tests messen —
+Quelltext im Sinne der AGPLv3 sind sie nicht, gebaut wird ohne sie, und sie
+machten das Archiv dreißigmal so groß wie den Quelltext (29,7 MB statt 0,26 MB).
+`quelltext-fassung.txt` sagt dies und verweist für den vollständigen Korpus auf
+die Anschrift nach § 3 Absatz 2. Wächst das Archiv wieder über 8 MiB, so bricht
+`webpaket.sh` ab; alsdann sind Massendaten ins Repository geraten, die dort nicht
+hingehören.
+
+(7) Trägt der Arbeitsbaum uneingecheckte Änderungen, so bricht die Herstellung
nach Absatz 3 ab, denn der beigelegte Quelltext wäre alsdann nicht der gebaute.
Für einen Probelauf hilft `QUELLTEXT_UNGEPRUEFT=1`.
@@ -513,26 +540,37 @@ Weg für Massenläufe.
[[ausrollen]]
== § 15 Ausrollen
-(1) Betrieben wird die Fassung unter einem Unterpfad einer bestehenden Domain,
-https://matthias.benkard.de/aendggner/. Ein eigener Server und ein eigenes
-Zertifikat sind hierfür nicht erforderlich; erforderlich ist nur ein Webserver
-für statische Dateien.
+(1) Erforderlich ist nur ein Ort für statische Dateien. Ausgeliefert wird über
+Cloudflare Workers. Dort gilt eine Grenze von 25 MiB je Datei — unkomprimiert
+gemessen —, und komprimiert wird beim Ausliefern ohnehin. `webpaket.sh` legt
+deshalb keine `.gz`/`.br`-Beilagen mehr an und hält am Ende jede Datei gegen
+diese Grenze; überschreitet eine sie, so bricht der Bau ab, statt das Hochladen
+scheitern zu lassen.
[source,shell script]
----
JAVA_HOME=/pfad/zu/oracle-graalvm ./mvnw -Pwasm package
+----
+
+(2) Wer die Fassung stattdessen selbst ausliefert — unter einem Unterpfad einer
+bestehenden Domain, wie zuvor unter https://matthias.benkard.de/aendggner/ —,
+braucht die Vorkompression und fordert sie beim Bau an:
+
+[source,shell script]
+----
+JAVA_HOME=/pfad/zu/oracle-graalvm VORKOMPRIMIEREN=1 ./mvnw -Pwasm package
rsync -av --delete target/web/ server:/var/www/aendggner/
----
-(2) `deploy/nginx-aendggner.conf` ist kein eigener `server`-Block, sondern ein
+(3) `deploy/nginx-aendggner.conf` ist kein eigener `server`-Block, sondern ein
Schnipsel zum Einfügen in den vorhandenen (`include`). Er bringt mit:
1. die Weiterleitung von `/aendggner` auf `/aendggner/`, ohne die alle relativen
Verweise der Seite auf die Domainwurzel zielten;
2. den MIME-Typ `application/wasm`, ohne den der Browser die Instanziierung des
Moduls verweigert;
-3. `gzip_static`/`brotli_static` für die vorkomprimierten Dateien, statt 24 MB je
- Abruf neu zu packen;
+3. `gzip_static`/`brotli_static` für die nach Absatz 2 vorkomprimierten Dateien,
+ statt 17 MB je Abruf neu zu packen;
4. `Cache-Control: no-cache` statt einer Haltefrist. Die Dateinamen tragen keine
Fassungskennung, und ein Browser mit altem `app.js` und neuem `.wasm` bekäme
sonst eine Mischfassung, die es nie gegeben hat. Revalidiert wird per ETag; das
@@ -543,11 +581,11 @@ Schnipsel zum Einfügen in den vorhandenen (`include`). Er bringt mit:
Synopse als `blob:`-Dokument die Richtlinie der erzeugenden Seite erbt, ihr
Stylesheet aber eingebettet trägt.
-(3) `impressum.html` und `datenschutz.html` tragen die Angaben nach § 5 DDG und
+(4) `impressum.html` und `datenschutz.html` tragen die Angaben nach § 5 DDG und
Art. 13 DSGVO. Die dort genannte Aufbewahrungsfrist der Zugriffsprotokolle
(14 Tage) muss zu derjenigen des Servers passen.
-(4) Der Footer der Startseite verweist auf den beigelegten Quelltext-Tarball; dies
+(5) Der Footer der Startseite verweist auf den beigelegten Quelltext-Tarball; dies
verlangt AGPLv3 § 13 für den Netzwerkbetrieb. Als fortlaufende Zweitquelle ist
die Anschrift nach § 3 Absatz 2 genannt.