Dart поддерживает несколько режимов компиляции, в зависимости от сценария использования:
-
AOT (Ahead-Of-Time) Compilation:
- Используется для создания нативных, высокопроизводительных приложений для мобильных (iOS, Android), настольных (Windows, macOS, Linux) и серверных платформ.
- Код компилируется в машинный код до выполнения.
- Обеспечивает быстрый запуск и высокую производительность.
- Используется при сборке релизных версий приложений (
flutter build).
- Не поддерживает горячую перезагрузку (Hot Reload).
-
JIT (Just-In-Time) Compilation:
- Используется в процессе разработки для быстрого итеративного цикла.
- Код компилируется в машинный код во время выполнения.
- Поддерживает горячую перезагрузку (Hot Reload) и горячую перезагрузку с сохранением состояния (Hot Restart).
- Обеспечивает быструю обратную связь во время разработки.
- Используется при запуске приложений в режиме отладки (
flutter run).
- Менее производителен, чем AoT, и имеет более медленный запуск из-за необходимости компиляции во время исполнения.
-
Dart2js:
- Компилятор, который преобразует Dart код в оптимизированный JavaScript файл.
- Используется для создания веб-приложений, работающих в браузере.
- Генерирует крупный, но высокооптимизированный JS-файл.
-
Dart Dev Compiler (DDC):
- Быстрый инкрементальный компилятор, который преобразует Dart код в JavaScript.
- Используется в процессе веб-разработки для быстрой итерации и отладки в браузере.
- Генерирует несколько JS-файлов, которые легче отлаживать, но они менее оптимизированы, чем вывод Dart2js.
- Поддерживает Source Maps для отладки оригинального Dart кода в браузере.
Основные различия сведены в таблице:
| Характеристика | AoT Компиляция | JIT Компиляция | Dart2js | Dart Dev Compiler (DDC) |
|---|
| Применение | Релиз (Мобил/Десктоп) | Разработка (Мобил/Десктоп) | Веб (Релиз) | Веб (Разработка) |
| Время компиляции | До выполнения | Во время выполнения | До выполнения | До выполнения |
| Скорость запуска | Быстрый | Медленнее | Зависит от JS | Быстрый |
| Производительность | Высокая | Ниже | Высокая | Ниже |
| Размер вывода | Оптимизированный | Код + Виртуальная машина | Оптимизированный | Множество файлов |
| Hot Reload | Нет | Да | Нет | Частично (WebDev) |
| Вывод | Нативный машинный код | Машинный код (JIT) | JavaScript | JavaScript |
Выбор режима компиляции зависит от целевой платформы и этапа разработки (разработка или релиз).