mbltdev15: alexander orlov, postforpost
TRANSCRIPT
Оптимизация UITableView
Александр Орловведущий iOS разработчик
Postforpost
60 FPS
16 ms render cycle
~ 10 ms client code
“It just works” ***
***lie
Стандартные механизмы
Переиспользование ячеек
• Не создаём экземпляры ячеек сами
• cellForRowAtIndexPath быстрее света
• Привязываем данные вовремя
Расчёт высоты
• Не используем делегат для постоянной высоты
• Нельзя инициализировать экземпляр ячейки
• Autolayout - слоупок
• Всё очень плохо
Расчёт высоты
Расчёт высоты
Расчёт высоты
Расчёт высоты
Расчёт высоты
Расчёт высоты
Autolayout == Cassowary
Расчёт высоты
Расчёт высоты
Расчёт высоты
“Scroll Performance: All layout is performed on a background thread, ensuring the main thread isn't tied up measuring text. 60FPS is a breeze even for deep, complex layouts like Facebook's News Feed.”
“0x5f3759df”
Нам нужно идти глубже
Blending
Blending
iOS Simulator “Debug” “Color Blended Layers”
Blending
Blending
Blending
“326 pixels per inch”
Охота на пиксели
Subpixel rendering
Subpixel rendering
iOS Simulator “Debug” “Color Misaligned Images”
Subpixel rendering
Subpixel rendering
Subpixel rendering
• Знать предельную точность координат/размеров
• Готовим ресурсы pixel-perfect
• Контролируем ситуацию
“My tastes are very…singular”
Асинхронный UI¯\_(ツ)_/¯
Асинхронный UI
• Тяжелые операции в фон, показываем placeholder
• Instruments - друг наш
• Всё очень плохо
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
Асинхронный UI
0x5f3759df
medium.com/@plasm