При стандартной Docker-сборке без кэша Rust-бинарник полностью пересобирается и занимает около 4 минут.
Инструмент cargo-chef кэширует зависимости, но финальная компиляция приложения всё ещё занимает около 3 минут.
Self-profiling rustc показал, что основное время уходит на LTO (особенно LLVM_lto_optimize) и codegen.
Отключение LTO и debug-символов сокращает время сборки финального binary до ~50 секунд.
Снижение оптимизационного уровня (opt-level=0) для финального crate ускоряет сборку до ~15 секунд, но отключает оптимизации.
Настройка порогов inlining через -C llvm-args (inline-threshold) уменьшила время до ~40 секунд.
Анализ трассировки LLVM в формате JSONL позволил выявить узкие места оптимизации.
Большие async-функции и многочисленные вызовы drop_in_place значительно замедляют оптимизацию.
Оборачивание Future в Pin<Box<>> ускорило оптимизацию одного из ключевых методов PhotosState с 5.3 до 2.1 секунд.
В результате комплекса изменений время сборки снизилось с ~175 секунд до ~32 секунд.
Get notified when new stories are published for "🇷🇺 Hacker News Русский"