Ответ вслух Middle Производительность спрашивают часто обновлено

Как вы оптимизируете Flutter-приложение

Вопрос

Экран со списком и фильтрами тормозит. Как вы будете искать и устранять проблему?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Сначала воспроизвожу в profile на реальном телефоне: debug ничего не скажет. Включаю performance overlay и смотрю, какой поток красный.

Что должно прозвучать в ответе

  • Воспроизвести в profile на реальном устройстве, performance overlay

  • DevTools: какие виджеты перестраиваются, где время CPU

  • Сократить перестроения: `const`, вынос состояния вниз, точечные подписки

  • Ленивые списки, `itemExtent`, изображения нужного размера

  • Тяжёлые вычисления (фильтрация больших данных) в изолят

  • Проверить отрисовку: `saveLayer`, `RepaintBoundary`

Что могут спросить следом

  • Как понять, что проблема в отрисовке, а не в build?
  • Почему async не помогает при тяжёлой фильтрации?
  • Когда RepaintBoundary вредит?

Разбор

Образцовый ответ: «Сначала воспроизвожу в profile на реальном телефоне: debug ничего не скажет. Включаю performance overlay и смотрю, какой поток красный. Если UI, иду в DevTools: включаю отслеживание перестроений и вижу, что, например, ввод в поле фильтра перестраивает весь экран. Исправляю: выношу поле в отдельный виджет, ставлю const, подписываюсь через select. Список перевожу на ListView.builder с itemExtent, картинки декодирую в нужном размере. Если фильтрация по тысячам записей занимает десятки миллисекунд, переношу её в Isolate.run, потому что async от этого не спасает. Если красный raster, ищу прозрачность и клипы над большими деревьями и отделяю анимации RepaintBoundary. После каждого изменения снова меряю»

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.