Stop compiling the same crates twice: sccache für Rust erklärt

Version 1.1 von Volker Kaltschmidt am 2026/02/21 10:47

Warnung
Dieser Blog-Beitrag wurde noch nicht veröffentlicht.

Warum Rust „langsam kompiliert“ – und wie sccache dein Leben rettet

Wer zum ersten Mal ein modernes Rust-Projekt baut – zum Beispiel mit Leptos oder Trunk – erlebt oft einen kleinen Schock.

Du gibst einen harmlosen Befehl ein:

trunk serve

Und dann passiert … sehr lange sehr viel.

Der Lüfter dreht hoch.
Der Laptop wird warm.
Und Cargo kompiliert scheinbar die halbe digitale Welt neu.

Viele stellen sich dann die Frage:
Warum ist Rust so langsam? Und kann man das beschleunigen?

Die kurze Antwort: Ja. Dramatisch sogar. Mit einem Tool namens sccache.

Aber zuerst müssen wir verstehen, was wirklich passiert.


Rust ist nicht langsam. Rust ist gründlich.

Rust verfolgt eine radikal andere Philosophie als viele moderne Entwicklungsumgebungen.

Es interpretiert nichts.
Es versteckt nichts.
Es kompiliert alles in echten, nativen Code.

Wenn du ein Rust-Projekt baust, passiert folgendes:

  • Jede Abhängigkeit wird exakt für dein System kompiliert
  • Jede Feature-Kombination wird separat gebaut
  • Jeder Target (Linux, Windows, WebAssembly) wird separat gebaut
  • Jede Compiler-Version erzeugt eigene Artefakte

Das Ergebnis ist extrem zuverlässig. Aber der erste Build dauert.

Ein modernes Web-Frontend in Rust kann leicht 200 bis 400 einzelne Crates umfassen.

Zum Vergleich:
In der JavaScript-Welt passiert etwas Ähnliches – aber es wird durch Interpreter und Bundler versteckt.

Rust macht es explizit.


Der eigentliche Grund für lange Buildzeiten: fehlender globaler Cache

Cargo speichert heruntergeladene Crates global:

~/.cargo/registry

Aber die kompilierten Versionen landen standardmäßig nur im Projektordner:

project/target/

Das bedeutet:

Ein neues Projekt kompiliert dieselben Abhängigkeiten erneut.

Selbst wenn sie technisch identisch sind.

Hier kommt sccache ins Spiel.


sccache: Der Turbo für Rust-Builds

sccache ist ein Compiler-Cache. Ursprünglich von Mozilla entwickelt.

Die Idee ist einfach:

Wenn Rust denselben Code erneut kompilieren würde, verwendet sccache stattdessen die bereits vorhandene Version.

Das spart enorm viel Zeit.

Nicht 10 Prozent.
Nicht 20 Prozent.

Sondern oft 70 bis 90 Prozent.


Installation von sccache

Die Installation ist einfach:

cargo install sccache

Danach aktivierst du es mit:

export RUSTC_WRAPPER=sccache

Das war’s.

Ab diesem Moment cached Rust seine Compiler-Artefakte global.


Der Unterschied ist dramatisch

Ohne sccache:

  • Erstes Projekt: 5 Minuten
  • Zweites Projekt: 5 Minuten

Mit sccache:

  • Erstes Projekt: 5 Minuten
  • Zweites Projekt: 10 Sekunden

Weil fast nichts mehr neu kompiliert werden muss.


Besonders wichtig für WebAssembly und Leptos

Frameworks wie Leptos benötigen WebAssembly.

Das bedeutet, Rust kompiliert zusätzlich für den Target:

wasm32-unknown-unknown

Das ist praktisch eine zweite Plattform.

Ohne Cache wird alles erneut gebaut.

Mit sccache wird es wiederverwendet.

Der Unterschied ist besonders auf Laptops spürbar.


Warum dieser Ansatz langfristig überlegen ist

Rust investiert Zeit beim Build, um Probleme zur Compile-Zeit zu lösen, nicht zur Laufzeit.

Das bedeutet:

  • weniger Bugs
  • stabilere Software
  • reproduzierbare Builds
  • keine „Dependency Hell“

Der Preis ist ein längerer erster Build.

Der Gewinn ist Stabilität.

sccache reduziert diesen Preis drastisch.


Fazit

Rust ist nicht langsam. Rust ist präzise.

Die langen Buildzeiten entstehen vor allem, weil Compiler-Artefakte standardmäßig nicht global gecached werden.

Mit einem einzigen Tool – sccache – lässt sich dieses Problem fast vollständig lösen.

Für jeden, der ernsthaft mit Rust arbeitet, ist sccache keine Optimierung.

Es ist Pflicht.


Quickstart Zusammenfassung

Installieren:

cargo install sccache

Aktivieren:

export RUSTC_WRAPPER=sccache

Status prüfen:

sccache --show-stats

Danach fühlt sich Rust plötzlich schnell an.

Nicht, weil es weniger arbeitet.

Sondern weil es aufhört, dieselbe Arbeit zweimal zu tun.