В этой части серии мы рассмотрим, как мы измеряли и ускоряли наш недавно реализованный GraphQL API. Мы не уделяли особого внимания оптимизации производительности, когда изначально создавали api, потому что у нас не было реальных данных о том, как он будет использоваться в производственной среде. Лучшее, что мы могли сделать вначале, - это интегрировать Apollo Engine для сбора данных, а затем предоставить нам представление о том, как мы можем улучшить производительность.

Что такое Apollo Engine?

Apollo Engine - это легко интегрируемая облачная служба, которая обеспечивает глубокое понимание API-интерфейсов GraphQL. Engine использует основные преимущества GraphQL, предоставляя такие функции, как кэширование, отслеживание выполнения запросов и отслеживание ошибок на уровне полей. Чтобы получить представление о том, как работает наш API, мы использовали функцию трассировки запросов.

С помощью трассировки запросов мы можем увидеть, что замедляет наши запросы на уровне преобразователя:

Это говорит нам, какая именно часть нашего запроса занимает больше всего времени на выполнение и сколько времени это добавлено к общему времени ответа.

Что мы узнали о нашем API?

Мы заметили, что каждый запрос запроса изначально долго реагировал на первый преобразователь:

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

Это дает нам огромную возможность ускорить время ответа на каждый запрос, попадающий в наш api.

Решение

Поскольку мы использовали JSON Web Tokens (JWT) для аутентификации и управления пользовательскими сеансами, мы можем использовать одну из его ключевых функций в наших интересах - полезную нагрузку. Мы можем закодировать пользовательские данные, которые мы ранее получали для каждого запроса api, как часть полезной нагрузки JWT во время генерации токена аутентификации. Таким образом, наш бэкэнд может использовать эту информацию вместо извлечения из базы данных для каждого запроса.

Результаты

Нам удалось сократить время ответа на каждый запрос в среднем на 30%.

Это был всего лишь один простой способ, которым мы смогли найти возможность улучшить взаимодействие с пользователем с помощью Apollo Engine. С тех пор мы смогли идентифицировать несколько других запросов, которые имели очень длительное время ответа, и смогли разбить их на более мелкие и быстрые запросы. Получить подобное представление о REST API было очень сложно, потому что реализация для каждого api разная, и для ее реализации потребуется много времени.

Обновление: теперь он называется Платформа Apollo. Есть много новых функций, так что не пропустите!