Rust Release Optimierung: Wie man kleine und schnelle Binärdateien erstellt
Emily Parker
Product Engineer · Leapcell

Sie haben ein Rust-Projekt fertiggestellt und arbeiten nun an der Kompilierung. Wie können Sie die kompilierte Datei so klein wie möglich machen? Wie können Sie sie so schnell wie möglich ausführen? Oder wie können Sie sowohl eine geringe Größe als auch eine hohe Geschwindigkeit erreichen?
Sie haben möglicherweise folgende Überlegungen:
- Minimierung der Dateigröße: Geeignet für die Embedded-Entwicklung, wo das Projekt klein und nicht komplex ist und die Ausführungsgeschwindigkeit bereits hoch ist. Das Hauptziel ist es, die Dateigröße so weit wie möglich zu reduzieren.
- Maximierung der Ausführungsgeschwindigkeit: Geeignet für Netzwerkdienste, bei denen die Dateigröße keine Rolle spielt, die Maximierung der Nebenläufigkeit jedoch oberste Priorität hat.
- Ausgleich zwischen Größe und Geschwindigkeit: Ein Mittelweg, der für verschiedene Arten von Projekten geeignet ist.
Sie müssen lediglich die folgende Konfiguration zu Ihrer Cargo.toml
-Datei hinzufügen und Folgendes ausführen:
cargo b --release
Konfigurationsbeispiele
Erzeugen einer kleineren ausführbaren Datei
[profile.release] opt-level = "z" # Optimieren für die kleinste Code-Größe lto = true # Link Time Optimization (LTO) aktivieren codegen-units = 1 # Reduzieren Sie die Anzahl der Codegenerierungseinheiten, was die Optimierungszeit erhöht, aber die binäre Größe reduziert panic = "abort" # Verwenden Sie 'abort' anstelle von 'unwind' für die Panic-Verarbeitung strip = "debuginfo" # Entfernen Sie Debug-Informationen
Erzeugen einer schnelleren ausführbaren Datei
[profile.release] opt-level = 3 # Optimieren für maximale Ausführungsgeschwindigkeit lto = "fat" # Aktivieren Sie die aggressivste Link Time Optimization codegen-units = 1 # Reduzieren Sie die Anzahl der Codegenerierungseinheiten, was die Optimierungszeit erhöht, aber die Leistung verbessert panic = "abort" # Verwenden Sie 'abort' anstelle von 'unwind' für die Panic-Verarbeitung
Ausgleich zwischen Größe und Geschwindigkeit
[profile.release] opt-level = "s" # Optimieren Sie die Größe unter Berücksichtigung der Geschwindigkeit lto = "fat" # Aktivieren Sie die aggressivste Link Time Optimization codegen-units = 1 # Reduzieren Sie die Anzahl der Codegenerierungseinheiten, was die Optimierungszeit erhöht, aber die Leistung verbessert panic = "abort" # Verwenden Sie 'abort' anstelle von 'unwind' für die Panic-Verarbeitung strip = "symbols" # Entfernen Sie Symbolinformationen, während die notwendigen Debugging-Informationen erhalten bleiben
Erklärung der Konfigurationen
opt-level
Beschreibung: Gibt den Grad der Compiler-Optimierungen an.
Mögliche Werte:
0
: Keine Optimierung, schnellste Kompilierzeit.1
: Optimieren für schnellere Kompilierung.2
: Ausgewogenheit zwischen Kompiliergeschwindigkeit und Laufzeitleistung (Standard).3
: Optimieren für maximale Laufzeitleistung."s"
: Optimieren für kleinere Code-Größe."z"
: Weiteres Optimieren für die Code-Größe, aggressiver als"s"
.
Begründung: Verwenden Sie "z"
, um die kleinste ausführbare Datei zu generieren; verwenden Sie 3
, um die schnellste ausführbare Datei zu generieren.
lto
Beschreibung: Aktiviert die Link Time Optimization (LTO).
Mögliche Werte:
false
: LTO deaktivieren (Standard).true
: LTO aktivieren."thin"
: Thin LTO aktivieren."fat"
: Aktivieren Sie die aggressivste LTO.
Begründung: Das Aktivieren von LTO reduziert die binäre Größe und verbessert die Laufzeitleistung. "thin"
ist eine moderate Wahl, während "fat"
die beste Optimierung bietet, aber die Kompilierzeit erhöht.
codegen-units
Beschreibung: Steuert die Anzahl der Codegenerierungseinheiten.
Standardwert: Normalerweise 16
. Wenn Sie sie auf 1
setzen, wird die höchste Optimierungsstufe aktiviert.
Begründung: Das Reduzieren der Anzahl der Codegenerierungseinheiten gibt dem Compiler mehr Informationen für globale Optimierungen, was zu einer kleineren und schnelleren ausführbaren Datei führt. Das Einstellen auf 1
maximiert die Optimierung, erhöht aber die Kompilierzeit.
panic
Beschreibung: Steuert das Panic-Verhalten.
Mögliche Werte:
"unwind"
: Den Stack abwickeln (Standard)."abort"
: Den Prozess direkt abbrechen.
Begründung: Die Verwendung von "abort"
reduziert die Größe der ausführbaren Datei und verbessert in einigen Fällen die Leistung, da die Informationen zum Abwickeln des Stacks entfallen.
strip
Beschreibung: Steuert, welche Debug- und Symbolinformationen entfernt werden.
Mögliche Werte:
"none"
: Alle Informationen beibehalten (Standard)."debuginfo"
: Debug-Informationen entfernen."symbols"
: Entfernen Sie Symboltabellen, behalten Sie aber die notwendigen Debugging-Informationen bei."all"
: Entfernen Sie alle optionalen Informationen, einschließlich Debug- und Symboldaten.
Begründung: Das Entfernen unnötiger Debug- und Symbolinformationen reduziert die Größe der ausführbaren Datei erheblich.
Zusammenfassung
Dies sind die Optimierungstechniken zum Kompilieren eines Rust-Projekts. Haben Sie sie gemeistert?
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Rust-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language-Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt viele Projekte kostenlos bereit
- Sie zahlen nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Reaktionszeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeit-Metriken und -Protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Aufwand - konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ