Как вы оптимизируете Flutter-приложение
Вопрос
Экран со списком и фильтрами тормозит. Как вы будете искать и устранять проблему?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Воспроизвести в 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 ошибок.