Patu

Optimiere deine Assets beim Build, nicht bei jeder Anfrage

Die meisten Assets einer Seite stehen längst fest, bevor ein einziger Besucher auftaucht. Das Hero-Bild, die Icons, das gebündelte CSS, die Schriften: Sie liegen in deinem Repo und sind von einer Anfrage zur nächsten identisch. Es gibt nur zwei Orte, sie zu optimieren. Einmal, beim Build. Oder immer wieder, am Edge, jedes Mal, wenn eine Seite lädt.

Für die Assets, die du selbst auslieferst, ist der Build der bessere Ort.

Warum beim Build

Du machst die Arbeit einmal. Das Ergebnis ist klein, sobald es ausgeliefert wird, und bleibt klein, ohne CPU pro Anfrage, ohne Transform-Cache zum Aufwärmen und ohne On-the-fly-Transform-Rechnung, die mit deinem Traffic wächst.

Das Ergebnis ist außerdem etwas, das du sehen kannst. Die optimierten Dateien liegen direkt in deiner Build-Ausgabe, du kannst sie also vergleichen, wiegen und genau wissen, was rausgeht. Eine Edge-Transformation ist eine Blackbox, der du vertraust; ein Build-Artefakt ist eine Datei, die du öffnen kannst.

Und es deckt mehr als Bilder ab. Dein Build kümmert sich bereits um JavaScript, CSS, SVG und Schriften, und all das schrumpft ebenfalls. Ein rohes TTF, das statt WOFF2 ausgeliefert wird, ist für sich genommen rund zwei Drittel verschwendet.

Wo der Edge sich weiterhin verdient macht

Die Build-Optimierung berührt nur die Assets, die durch deinen Build laufen. Zwei Fälle brauchen wirklich den Anfragepfad:

Für eine normale Seite, und das sind die meisten Seiten, ist keiner dieser Fälle der Flaschenhals, und der Build ist einfacher und günstiger.

Es umsetzen

Zwei Wege, beide laufen über die Patu-API, sodass die Kodierung außerhalb deiner Maschine passiert.

Ein Befehl, in jedem Build-Skript oder CI-Job:

PATU_KEY=your_key npx @patu.dev/cli ./dist

Es durchläuft den Ordner, optimiert die Bilder, das SVG, das JS, das CSS und die Schriften an Ort und Stelle und überspringt alles, was es nicht wirklich schlagen kann. Füge --cdn hinzu, um sie hochzuladen und die Referenzen auf cdn.patu.dev umzuschreiben, statt zurück auf die Festplatte zu schreiben.

Oder binde es in Vite ein, sodass jeder Build abgedeckt ist, ohne dass du daran denken musst:

import patu from '@patu.dev/vite'
export default { plugins: [patu()] }

Der Punkt

Der Edge ist nicht falsch. Aber es ist gut möglich, dass du dafür zahlst, bei jeder einzelnen Anfrage Assets zu transformieren, die sich zwischen ihnen nie ändern. Optimiere sie einmal, im Build, den du ohnehin schon ausführst, und liefere sie klein aus. Die Integrationsseite hat das CLI, das Vite-Plugin und den Rest.