Правильное использование структур данных поможет оптимизировать скорость/память кода. В больших продуктах каждая оптимизация умножается на миллионы/миллиарды пользователей. Так я сэкономил Uber $22 000 в год используя базовые знания структуры данных Set.
Проблема
Часто используемый скрин приложения отправлял impression аналитику при прокрутке экрана с дублированием. Например если вы видели на экране “XYZ” 10 раз прокрутив контент вверх вниз несколько раз, то аналитика отправлялась 10 раз. Хоть 1 раза было достаточно.
Решение
Я добавил дедупликацию аналитики перед отправкой. Ниже упрощенный псевдо код:
// Было
logAnalytics(for: uuid)
// Стало
let uuids = Set<String>()
...
if !uuids.contains(uuid) {
uuids.add(uuid)
logAnalytics(for: uuid)
}
Результат
На графике ниже показан объём аналитики для конкретного события. С момента выпуска оптимизированного кода (красная стрелка) видно падение в количестве событий. Новый код сократил расходы на аналитику этого события на $22 000 в год.
Вывод
Знание структур данных поможет оптимизировать код. Чем больше продукт, тем больше эффект оптимизации.
Спасибо за прочтение чернового варианта статьи Азизбеку Матчанову, Айгуль Джуманазаровой, Муслимбеку Абдуганиеву.
Обо мне
Меня зовут Дархонбек. Автор ИТ блога 10x Engineer. Я работаю iOS разработчиком в Сан Франциско в компании Uber.
Связаться со мной можно по почте: darkhonbek.interview@gmail.com