Известный закон Джеймса Завински гласит “Каждая программа пытается расширяться до тех пор, пока не сможет читать почту”.
В данном докладе будут рассмотрены следующие практические аспекты, возникшие при разработке популярного почтового клиента Spark (номинант “App Store Best Of 2015”):
- Высоконагруженные интерфейсы: рендеринг цепочек сообщений и списка писем — ключевых элементов почтового приложения с высокими требованиями к производительности. Разбор подходов, использующих UIKit, CoreText, AsyncDisplayKit, Core Graphics.
- Базы данных и поиск: работа с большими SQLite базами, оптимизация SQL-запросов, производительность полнотекстового поиска, опыт перехода с SQLite FTS4 на SQLite FTS5.
- Ускоряем Core Foundation: техники кэширования, производительность регулярных выражений, использование альтернативных библиотек (expat, libxml, libcurl), разгрузка applicationDidFinishLaunching, эффективная работа с многопоточностью.
- Работа в фоновом режиме и сетевое взаимодействие: энергосбережение с использованием облачной инфраструктуры; асимметричное шифрование почтовых сообщений; поддержка HTTP/2 для REST API, результаты тестирования алгоритма сжатия LZFSE.
Помимо практических аспектов, в докладе будет уделено внимание используемой в Spark методологии тестирования производительности и энергопотребления.