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

Zuletzt geändert von Volker Kaltschmidt am 2026/02/21 12:42

Warum Rust-Projekte so lange bauen – und wie sccache alles beschleunigt

Rust gilt als schnell. Extrem schnell sogar.
Warum also fühlt es sich beim ersten Build oft so an, als würde dein Laptop durch Beton rechnen?

Der Lüfter dreht hoch.
Der Compiler läuft minutenlang.
Und ein einfaches Projekt zieht plötzlich hunderte Abhängigkeiten.

Viele Entwickler stellen sich dann dieselbe Frage:

Ist Rust einfach langsam?

Die ehrliche Antwort lautet: Nein. Rust ist nicht langsam. Rust ist gründlich.
Und mit der richtigen Konfiguration kann Rust sogar überraschend schnell sein.

Der Schlüssel liegt im Verständnis, was beim Build passiert – und wie man unnötige Arbeit vermeidet.


Was beim ersten Rust-Build wirklich passiert

Wenn du ein Rust-Projekt baust, kompiliert Rust nicht nur dein eigenes Programm.

Es kompiliert auch jede einzelne Abhängigkeit.

Ein modernes Rust-Webprojekt, zum Beispiel mit Leptos oder WebAssembly, umfasst schnell:

  • 200 bis 400 Crates
  • tausende Quelldateien
  • mehrere Millionen Zeilen Code

Und das Entscheidende:

Rust kompiliert alles in echten nativen Maschinencode.

Kein Interpreter.
Keine virtuelle Maschine.
Keine Abkürzungen.

Das Ergebnis ist extrem schnelle und stabile Software.

Der Preis ist ein längerer erster Build.


Warum Rust scheinbar dieselben Crates immer wieder neu kompiliert

Cargo, der Rust-Paketmanager, speichert heruntergeladene Crates global:

~/.cargo/registry

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

project/target/

Das bedeutet:

Jedes neue Projekt beginnt praktisch von vorne.

Selbst wenn exakt dieselben Abhängigkeiten bereits auf deinem System existieren.

Dein Computer wiederholt Arbeit, die er eigentlich schon erledigt hat.

Hier setzen zwei einfache Lösungen an.


Lösung 1: Ein globales target-Verzeichnis

Du kannst Cargo anweisen, ein gemeinsames Build-Verzeichnis für alle Projekte zu verwenden.

Erstelle dazu die Cargo-Konfiguration:

mkdir -p ~/.cargo
nano ~/.cargo/config.toml

Inhalt:

[build]
target-dir = "/home/deinname/.cargo/target"

Ersetze deinname durch deinen tatsächlichen Benutzernamen.

Was das bewirkt

Jetzt greifen alle Rust-Projekte auf denselben Build-Cache zu.

Abhängigkeiten müssen nicht erneut kompiliert werden.

Das reduziert Buildzeiten drastisch.

Besonders bei großen Frameworks wie:

  • Leptos
  • Tokio
  • Axum
  • WebAssembly-Projekten

Der Effekt ist sofort spürbar.


Lösung 2: sccache – der Compiler-Cache

Der zweite, noch mächtigere Beschleuniger ist sccache.

sccache wurde ursprünglich von Mozilla entwickelt und fungiert als Cache für Compiler-Ergebnisse.

Installation:

cargo install sccache

Aktivierung:

export RUSTC_WRAPPER=sccache

Das war’s.

Ab jetzt merkt sich Rust bereits kompilierte Ergebnisse und verwendet sie wieder.


Warum sccache so effektiv ist

Normalerweise kompiliert Rust jede Abhängigkeit erneut, wenn sich etwas ändert.

sccache erkennt, wenn sich nichts geändert hat.

Und überspringt die Kompilierung vollständig.

Das spart enorme Zeit.

Typischer Unterschied:

Ohne sccache:

  • erstes Projekt: 5 Minuten
  • zweites Projekt: 5 Minuten

Mit sccache:

  • erstes Projekt: 5 Minuten
  • zweites Projekt: 10–30 Sekunden

Besonders wichtig für WebAssembly und moderne Webframeworks

Frameworks wie Leptos verwenden WebAssembly.

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

wasm32-unknown-unknown

Das ist eine komplett eigene Plattform.

Ohne Cache wird alles erneut gebaut.

Mit globalem target-Verzeichnis und sccache wird fast alles wiederverwendet.

Gerade auf Laptops ist der Unterschied enorm.


So prüfst du, ob sccache funktioniert

sccache --show-stats

Du solltest sehen:

  • Cache hits
  • Cache misses
  • gespeicherte Ergebnisse

Mit der Zeit steigt die Trefferquote stark an.

Und Builds werden immer schneller.


Warum Rust diesen Weg geht

Rust optimiert nicht für den schnellsten ersten Build.

Rust optimiert für:

  • maximale Stabilität
  • reproduzierbare Builds
  • vollständige Kontrolle über Abhängigkeiten
  • native Performance

Rust löst Probleme zur Compile-Zeit, nicht zur Laufzeit.

Das macht Software zuverlässiger.


Fazit

Rust ist nicht langsam.

Rust ist präzise.

Die langen Buildzeiten entstehen hauptsächlich, weil Compiler-Ergebnisse standardmäßig nicht global wiederverwendet werden.

Mit zwei einfachen Maßnahmen lässt sich das Problem fast vollständig lösen:

Ein globales target-Verzeichnis:

mkdir -p ~/.cargo
nano ~/.cargo/config.toml
[build]
target-dir = "/home/deinname/.cargo/target"

Und sccache:

cargo install sccache
export RUSTC_WRAPPER=sccache

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

Nicht, weil es weniger arbeitet.

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

Und genau das ist es, was gute Werkzeuge ausmacht.