mbltdev15: alexander orlov, postforpost

44
Оптимизация UITableView Александр Орлов ведущий iOS разработчик Postforpost

Upload: e-legion

Post on 22-Jan-2018

458 views

Category:

Mobile


4 download

TRANSCRIPT

Page 1: MBLTDev15: Alexander Orlov, Postforpost

Оптимизация UITableView

Александр Орловведущий iOS разработчик

Postforpost

Page 2: MBLTDev15: Alexander Orlov, Postforpost

60 FPS

16 ms render cycle

~ 10 ms client code

Page 3: MBLTDev15: Alexander Orlov, Postforpost

“It just works” ***

***lie

Page 4: MBLTDev15: Alexander Orlov, Postforpost

Стандартные механизмы

Page 5: MBLTDev15: Alexander Orlov, Postforpost

Переиспользование ячеек

• Не создаём экземпляры ячеек сами

• cellForRowAtIndexPath быстрее света

• Привязываем данные вовремя

Page 6: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

• Не используем делегат для постоянной высоты

• Нельзя инициализировать экземпляр ячейки

• Autolayout - слоупок

• Всё очень плохо

Page 7: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 8: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 9: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 10: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 11: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 12: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Autolayout == Cassowary

Page 13: MBLTDev15: Alexander Orlov, Postforpost
Page 14: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 15: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

Page 16: MBLTDev15: Alexander Orlov, Postforpost

Расчёт высоты

“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.”

Page 17: MBLTDev15: Alexander Orlov, Postforpost

“0x5f3759df”

Page 18: MBLTDev15: Alexander Orlov, Postforpost

Нам нужно идти глубже

Page 19: MBLTDev15: Alexander Orlov, Postforpost

Blending

Page 20: MBLTDev15: Alexander Orlov, Postforpost

Blending

iOS Simulator “Debug” “Color Blended Layers”

Page 21: MBLTDev15: Alexander Orlov, Postforpost

Blending

Page 22: MBLTDev15: Alexander Orlov, Postforpost

Blending

Page 23: MBLTDev15: Alexander Orlov, Postforpost

Blending

Page 24: MBLTDev15: Alexander Orlov, Postforpost

“326 pixels per inch”

Page 25: MBLTDev15: Alexander Orlov, Postforpost

Охота на пиксели

Page 26: MBLTDev15: Alexander Orlov, Postforpost

Subpixel rendering

Page 27: MBLTDev15: Alexander Orlov, Postforpost

Subpixel rendering

iOS Simulator “Debug” “Color Misaligned Images”

Page 28: MBLTDev15: Alexander Orlov, Postforpost

Subpixel rendering

Page 29: MBLTDev15: Alexander Orlov, Postforpost

Subpixel rendering

Page 30: MBLTDev15: Alexander Orlov, Postforpost

Subpixel rendering

• Знать предельную точность координат/размеров

• Готовим ресурсы pixel-perfect

• Контролируем ситуацию

Page 31: MBLTDev15: Alexander Orlov, Postforpost

“My tastes are very…singular”

Page 32: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI¯\_(ツ)_/¯

Page 33: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

• Тяжелые операции в фон, показываем placeholder

• Instruments - друг наш

• Всё очень плохо

Page 34: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 35: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 36: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 37: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 38: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 39: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 40: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 41: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 42: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI

Page 43: MBLTDev15: Alexander Orlov, Postforpost

Асинхронный UI