Правильное использование структур данных поможет оптимизировать скорость/память кода. В больших продуктах каждая оптимизация умножается на миллионы/миллиарды сессий пользователей. Так я сэкономил компании $22 000 в год используя базовые знания структуры данных Set.

Проблема

Часто используемый скрин приложения отправлял impression аналитику при прокрутке экрана с дублированием. Например если вы видели на экране “XYZ” 10 раз прокрутив контент вверх вниз несколько раз, то аналитика отправлялась 10 раз.

Я поговорил с нашими аналитиками и они сказали что им достаточно 1 раза отправки данного события. Они добавили что делают дедупликацию этих событий на своей стороне.

Решение

Я добавил дедупликацию аналитики перед отправкой. Ниже упрощенный псевдо код:

// Было
logAnalytics(for: uuid)

// Стало
let uuids = Set<String>()
...
if uuids.insert(uuid).inserted {
    logAnalytics(for: uuid)
}

Результат

На графике ниже показан объём аналитики для конкретного события. С момента выпуска оптимизированного кода (красная стрелка) видно падение в количестве событий. Новый код сократил расходы на аналитику этого события на $22 000 в год.

Падение в конце графика это не очередная оптимизация. Сервер тоже не падал. Данные аналитики поступают с задержкой. Поэтому новые события еще не поступили.

Вывод

Знание структур данных поможет оптимизировать код. Чем больше продукт, тем больше эфф��кт оптимизации.


Спасибо за прочтение чернового варианта статьи Азизбеку Матчанову, Айгуль Джуманазаровой, Муслимбеку Абдуганиеву.

Обо мне

Меня зовут Дархонбек. Автор ИТ блога 10x Engineer. Я работаю iOS разработчиком в Сан Франциско в компании Uber.

Связаться со мной можно по почте: darkhonbek.interview@gmail.com