Контакты

Россия 196084 , Санкт-Петербург, ул. Заозерная, дом №8, корпус 2, Литера А, офис 212

Мы работаем по будням с 10.00 до 19.00 +7 (495) 215-53-16 +7 (812) 748-20-96 info@notissimus.com
Социальные сети

Заказчик

«Зенит» — знаменитый футбольный клуб Санкт-Петербурга, за который болеют целыми поколениями. Наше сотрудничество с ФК «Зенит» началось в 2015 году. Представители заказчика подошли к делу основательно: составили подробное техническое задание, для каждого экрана дали исчерпывающее описание. Они знали чего хотят, и переговоры быстро перешли к технической стороне.

Хотя наш опыт показывает, что не бывает полностью беспроблемных проектов, тем не менее работа не предвещала никаких неожиданностей. Шла привычная рутина: есть договор, есть задачи, все заняты делом. Так как заказчиком были проработаны и дизайн, и полное техническое задание, то разработка проекта шла гладко и без необходимости множественных согласований.

Особенности приложения

Приложения одного типа чем-то похожи. Например, все приложения интернет-магазинов имеют примерно одинаковую структуру и особенности. То же самое можно сказать и про спортивные приложения. Мобильное приложение для ФК «Зенит» — не первое из разряда спортивных, которое мы делаем. Разумеется, есть отличия. Но по своей архитектуре, по своему строению спортивные приложения тоже довольно близки.
Главный экран достаточно сложный и насыщенный. В подобных приложениях значительная часть функциональности строится вокруг главного экрана. Трудность задачи — сделать так, чтобы страница не выглядела перегруженной, но при этом умудриться уместить на ней значительное количество информации.

С точки зрения архитектуры и сервер, и бекенд — полностью на стороне ФК «Зенит». Дополнительно мы сделали сервер push-уведомлений, но он тоже разместился на стороне заказчика.
Ещё один источник непростых решений — интеграция со сторонними сервисами. Приложение ФК «Зенит» имеет несколько внешних независимых сервисов, взаимодействие с которыми должно быть отзывчивым и незаметным. Приведем несколько примеров.

Тотализатор, в котором можно принять участие прямо в приложении, перед началом игры испытывает ажиотажную нагрузку, а значит, надо добиться, чтобы пользователи не просто не разочаровывались интеграцией, а не замечали бы её вовсе.

Сервис push- уведомлений

Сервер push-уведомлений для триггерных событий работает независимо и тоже интегрирован в приложение. Все события из жизни команды — встреча с соперником, забитый гол и тому подобное — поступают на главный сервер. Тот, в свою очередь, взаимодействует с сервером push-уведомлений. В приложении есть возможность настроить перечень уведомлений, благодаря чему пользователь может оставаться в курсе интересующих его событий.

Помню, когда отдали приложение на первый тест, то естественно не всё работало, так как не все интеграционные мероприятия были в полной мере завершены. У заказчика был некоторый шок: и это не работает, и то не так себя ведет. Это естественный процесс. После выяснения всех причин и коррекции методов API всё исправляется и начинает работать как ожидалось.

boss
Александр Маркович Руководитель проекта

Аудит

У ФК «Зенит» возник вопрос: почему иногда приложение отрабатывает медленно? Для наглядности был выполнен небольшой эксперимент.

Участвовало три устройства: одна из последних моделей iPhone и два Android — среднего и низкого ценового сегмента. Приложение одновременно запустили на всех трёх устройствах-участниках. Несложно догадаться, что первым отработал iPhone, затем (практически сразу) производительный Android и, наконец, с заметным отставанием слабенький Android.
Мы представили заказчику наши объяснения, подготовили описательную часть, привели характеристики устройств, дали сравнение производительности. Время загрузки главного экрана было прямо пропорционально уровню технических характеристик устройств.

Представители ФК «Зенит» поступили очень профессионально. Они внимательно изучили полученную от нас информацию, поблагодарили и… нашли компанию для получения независимой оценки.
Задача аудита состояла в анализе программного кода и замеров скорости работы приложения.

Действительно, приложение долго отрабатывает на старте — это неоднозначный момент. Эксперимент продолжился, но уже на совсем ином уровне. Аудиторская компания провела большое исследование, по итогу которого подготовила несколько отчетов.
Первая часть аудиторской работы состояла в следующем: провести аудит кода мобильного приложения с целью выявить возможность его оптимизации.

Ожидаемый результат: предоставление рекомендаций по рефакторингу и оптимизации исходного кода с целью увеличения производительности работы приложения — отдельно для каждой операционной системы.
Особенности проверки исходного кода были следующие:
  • приведение кода согласно методологии Clean Architecture;
  • оптимизация кода для работы с локальной базой данных;
  • оптимизация кода для работы с сервером;
  • оптимизация верстки пользовательского интерфейса.
По итогам аудита выяснилось, что:
  • приложения работают корректно на каждой из платформ;
  • код читабелен, монолитности структуры не наблюдается;
  • роблем с базой данных не обнаружено;
  • имеется несколько дополнений по замене WebView и некоторых UI-компонентов в версиях для обеих платформ с целью повысить читаемость и производительность кода.
Вторая часть аудиторской работы состояла в тестировании отзывчивости.

Измерялась производительность и скорость отрисовки разных частей приложения. Требовалось исследовать эту сторону работы и сформировать рекомендации для проблемных разделов. Для аудита скорости было составлено 6 сценариев, проработано 11 параметров измерений.
Были получены следующие выводы и рекомендации:
  • время запуска мобильного приложения находится в пределах нормы;
  • на высокопроизводительных устройствах (среднебюджетные и выше) время загрузки данных находится в пределах допустимых значений;
  • на устройствах с бюджетными процессорами открытие основного экрана происходит достаточно долго — рекомендуется разграничить первичную загрузку данных по блокам, отдельно друг за другом, чтобы добиться асинхронности вместо последовательной загрузки блоков, как делается, например, во многих мобильных банках;
  • работа большинства экранов без нареканий — быстро и без ошибок;
  • возникла проблема при скроллинге матчей — рекомендуется пересмотреть логику работы рекламных баннеров;
  • авторизация сделана хорошо.

Что можно сказать?

В принципе, ожидаемый результат. Наш код получил достаточно высокую оценку. Тестирование и замеры показали, что оценки для каждого сценария либо в пределах нормы, либо даже выше нормы, в том числе и для главного экрана. Аудиторы высказали свое ви́дение. Некоторые моменты аудита мы учли, с некоторыми не согласились и обосновали свою позицию заказчику.

Наши «да» и «нет»

Рекомендация обновить проекты с Net Standard — это как раз то, что мы сейчас и делаем. Процесс этот не простой и не быстрый. Поддержка Xamarin заканчивается в мае 2024 года, и мы за полгода начинаем переход. Обновление Xamarin — отдельная задача, которая касается всех проектов, обновление затронет все разработанные нами приложения, а не только ФК «Зенит».
Также можно обновить библиотеки по работе с сетью до последней стабильной версии на Android. Однако ошибки сети чрезвычайно редки. Обновление сделать можно, но это никак не повлияет на производительность.
Основное наше несогласие сводилось к разному ви́дению подходов, используемых при создании пользовательского интерфейса.
Например, в рекомендациях аудиторов говорилось о переразбивке экранов на более мелкие элементы. В действительности, многие экраны именно так и выполнены, а переразбивка тех немногочисленных, что остались, не улучшит отзывчивость.
Замена иконок формата png на векторные pdf для iOS — неоправданная замена, которая ни на скорость, ни на качество не повлияет. Тогда уж для iOS лучше превратить все картинки resource-png в imageset (универсальный контейнер от Apple)
Следующая рекомендация — избавиться от бинарных файлов xib для iOS. Во-первых, xib — не бинарный формат, а текстовый всё-таки. Во-вторых, замена этому решению — верстка кода, которая экспоненциально затрудняется с усложнением дизайна. Намного проще верстать экраны в удобном редакторе интерфейса XCode и сохранять результаты в xib.
Был аргумент, что если над файлом xib работает больше одного человека, то становится сложно разрешать конфликты. Теоретически да, если разработка распределенная и децентрализованная — над одним файлом может работать параллельно несколько человек. Только это не наш случай — у нас организация, все трудятся рядом в офисе и редко бывает, чтобы задачи программистов пересекались в пределах одного экрана. Замена xib попросту усложнит верстку.
Ещё одна спорная рекомендация — заменить компонент UITableView на UICollectionView для iOS. Аргументы были следующие: первый плохо справляется с расчетом высоты вложенных элементов, второй обладает асинхронной загрузкой и отображением данных.

Это совсем не так. UITableView отлично подходит для вертикальных списков, а проблемы с расчетом высоты случаются только при недостаточно профессиональной верстке. Волшебная асинхронность UICollectionView второго компонента тоже из разряда редкостей.
Что действительно влияет на скорость?

Приложение работает с компонентом WebView, который является серьезным испытанием для производительности. При этом происходит переход на сайт для получения и отображения ресурсов. WebView — действительно «бутылочное горлышко» в общей отзывчивости приложения, но заменить эту технологию пока возможности нет.
Состоялся тройственный созвон. Представители ФК «Зенит» подтвердили, что работа с WebView — их требование, такова постановка задачи. Подобное ограничение связано с тем, что сейчас в приоритете другие задачи и нет необходимости заново воспроизводить весь функционал на стороне мобильного приложения — для этого надо по сути создавать второй бэкенд с разработкой методов API и так далее.
В итоге аудит пошел на пользу всем. Аудиторская компания получила новый опыт, мы — дополнительную уверенность в своей экспертности, а ФК «Зенит» — чувство спокойствия и гарантию, что всё идет наилучшим образом.

Всё, что приводило к усложнению дальнейшей работы и было чревато нехорошими последствиями, мы отбросили. Некоторые доработки согласовали с ФК «Зенит» и взяли в работу.

Аудит завершился как нельзя лучше.

Выводы

Всегда есть технические рабочие моменты.

Например, сейчас мы добавляем интеграцию с сервисом, который отслеживает и анализирует действия пользователей в приложении для получения рекомендаций по оптимизации работы как самого приложения, так и бизнес-задач. Это тоже длительный процесс и наверняка придется задуматься о каких-то нюансах. Отметим высокий профессионализм представителей заказчика — работать с ними не только эффективно, но и приятно.

Давно работаем с командой Нотиссимус. Первое приложение, которое они сделали было для интернет-магазина атрибутики ФК «Зенит». Сейчас мы очень тесно сотрудничаем в части создания официального мобильного приложения болельщиков нашего клуба и у нас большие планы по развитию.

fc-zenit
Виктор Луннов ИТ-директор, ФК «Зенит»
Не бывает беспроблемных проектов. Каждая проблема — это победа. И сотни тысяч довольных пользователей тому подтверждение.

Результат проделанной работы​