Какие есть альтернативы движку Skia в Flutter?

«Какие есть альтернативы движку Skia в Flutter?» — вопрос из категории Рендеринг и производительность, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хотя Skia является движком рендеринга по умолчанию, основная альтернатива, разрабатываемая самой командой Flutter, — это Impeller. Я слежу за его развитием и уже тестировал на iOS.

1. Impeller Impeller — это новый движок рендеринга, написанный специально для Flutter. Его ключевая цель — устранить шейдерные лаги (shader compilation jank), которые были главной проблемой Skia на мобильных GPU.

  • Как это работает: Вместо компиляции шейдеров во время выполнения (как Skia), Impeller использует заранее скомпилированные (AOT) шейдеры и более предсказуемый конвейер рендеринга.
  • Текущий статус:
    • iOS: Стабильно включен по умолчанию начиная с Flutter 3.16. На практике это дает заметно более плавную анимацию, особенно при первом запуске сложных анимаций.
    • Android: В активной разработке, доступен для preview. Включить его можно через flutter run --enable-impeller или настройку в android/app/src/main/AndroidManifest.xml:
      <meta-data
      android:name="io.flutter.embedding.android.EnableImpeller"
      android:value="true" />

2. CanvasKit (для Web) Для платформы Web у Flutter есть два режима рендеринга:

  • HTML: Рендерит виджеты в DOM (быстрее загружается, но менее точный рендеринг).
  • CanvasKit: Использует WebAssembly-порт Skia для рендеринга на <canvas>. Это дает пиксельное соответствие мобильным и десктопным версиям, но размер бандла больше. Выбирается при сборке:
    flutter build web --web-renderer canvaskit

Мой выбор: Для новых проектов на iOS я уже полагаюсь на Impeller. Для Android пока жду его стабилизации, но для проектов, где критически важна плавность первых анимаций, тестирую его в preview-режиме. На Web для сложных UI с кастомной графикой выбираю CanvasKit, а для контент-ориентированных сайтов — HTML-рендерер.