Ich bin jetzt zu etwas gekommen, dass ich schon lange machen wollte, aber immer wieder verschoben habe: Das Atom-Feed dieses Blogs auf mehrere Dateien zu verteilen. Aber warum wollte ich das machen?
Nun, mein Blog hat mittlerweile über 1100 Einträge. Die sind alle vollständig in dem Feed drin. Damit ist das Feed über 3 MiB groß. Komprimiert sind das zwar nur noch knapp 900 kiB (gz mit Zopfli) bzw. knapp 700 (Brotli), aber das ist immer noch eine Menge. Drei Gründe, warum das ein Problem ist:
- werden diese Dateien jedes Mal komplett heruntergeladen, wenn es eine Änderung gibt und ein feed-Reader das Feed lesen will
- es wird nicht weniger, mit jedem weiteren Post wird die Datei größer
- ist die Zopfli-Kompression des Feeds der mit Abstand am längsten dauernde Teil der Seitengenerierung, und muss jedes Mal gemacht werden, wenn ich einen neuen Post hinzufüge oder auch nur die kleinste Änderung vornehme.
Glücklicherweise gibt es RFC 5005, der definiert, wie man Atom-Feeds aufteilen kann. Ich habe mich für ein Feed-Archiv entschieden, weil es dann einfacher sein sollte, weiterhin alle Einträge zu finden und vor allem auch, die alten Feed-Teile unberührt zu lassen (und somit nicht ständig neu komprimieren zu müssen).
Wie ich RFC 5005 implementiert habe
Nach dem RFC muss ich meinen Feed grob in zwei Teile teilen. Zum einen in einen Feed der aktuellen (current) Artikel. Dann in keinen bis beliebig viele Archivdateien. Die Archivdateien werden als im Wesentlichen unveränderlich betrachtet. Sie dürfen sich ändern, aber Feedreader dürfen davon ausgehen, dass sie es nicht tun. Insbesondere sollen keine Einträge hinzukommen.
Sollte sich ein alter Eintrag doch noch wesentlich ändern, muss er (unter derselben ID) noch einmal im Feed der aktuellen Artikel auftauchen. Dabei darf es Überschneidungen zwischen den Feeds geben.
In meinem Fall habe ich als Archivdateien alle abgeschlossenen Jahre des Blogs gewählt. In Beispielen habe ich eine monatliche Aufteilung gesehen, aber so viel schreibe ich dann doch nicht. Das neueste Archiv-Feed ist also momentan 2025. Alle feeds, die im laufenden Jahr erstellt wurden, kommen erst einmal in den aktuellen Feed. Dann alle Artikel, die im laufenden Jahr wesentlich verändert wurden. Dazu kommen in meinem Fall noch alle Artikel, die im Zeitraum eines halben Jahres vor dem aktuellsten Artikel erstellt oder aktualisiert wurden. Das habe ich gemacht, damit nicht am ersten Januar mein ganzes Feed plötzlich leer ist. Nach und nach verschwinden die archivierten Artikel dann aber aus dem aktuellen Feed. Die Artikel des laufenden Jahres kommen allerdings erst nach Ablauf des Jahres in das Archiv.
Der aktuelle Feed verweist auf das jüngste Archiv-Feed, von da an ist es eine verkettete Liste bis zum ältesten Archive-Feed. Alle Archiv-Feeds haben zudem noch einen Link zum aktuellen Feed.
Ich bin mir nicht zu 100% sicher, dass ich den Standard korrekt verstanden und korrekt implementiert habe, aber ich bin sicher genug.
Testphase
Ein Erfolg zeigt sich jetzt schon: die Dateigrößen meines Feeds sind aufgeteilt viel handhabbarer: Alle Dateien sind deutlich kleiner als die Einzeldatei vorher, und im Regelfall muss nur der aktuelle Feed neu geschrieben und komprimiert werden, was die Verzögerung mein Veröffentlichen eines Blogposts um mehrere Sekunden senkt. Sekunden, die vorher sehr nervig gewesen sind.
Ich gehe damit jetzt erst einmal in die Testphase. Glücklicherweise hängt bei mir davon kein Geschäft ab, aber ich bin mir unsicher, wie gut die Unterstützung von RFC 5005 bei Feed-Readern ist.
Warum bin ich skeptisch? Drei Hauptgründe:
- In Thunderbird zum Beispiel sehe ich nur einen Teil meiner Blogposts. Ich werde aber noch ein paar andere Feedreader ausprobieren
- bei einer Suche nach „RFC 5005“ fand ich im Netz nicht viel. Die Spezifikation, ein paar Dokumente, dann aber diese Zusammenfassung einer Hobbyradiosendung, wo unter anderem erwähnt wird:
[…] but a solution to let your Atom feed have the cake and eat it too existed already 13 years ago, if only any of our feed readers would adhere to it: RFC 5005, Feed Paging and Archiving
- ansonsten habe ich eine Menge Tickets auf Github gefunden, wo Leute wollen, dass RFC 5005 implementiert wird. Die meisten davon betreffen Projekte, die den Feed schreiben, aber ein paar betreffen auch Feedreader.
Also mal schauen. Die Adresse des Feeds für dieses Blog hat sich nicht geändert, aber es sind jetzt weniger Blogposts darin. Der rest ist von dem Hauptfeed aus verlinkt. Hoffen wir mal, dass das keine größeren Probleme bereitet.