Руководство по оптимизации

В этом руководстве описываются некоторые стратегии оптимизации, позволяющие улучшить безопасность и эффективность Google Maps API, а также контролировать расходы.

Безопасность

Внедряйте рекомендации по безопасности

Ключи API – это учетные данные, которые действуют в пределах проекта. Их нужно защищать так же тщательно, как идентификаторы и пароли пользователей. Иначе возникает риск несанкционированного использования ключей и, соответственно, квоты, которое может привести к переплате. Поэтому тщательно изучите рекомендации по обеспечению безопасности доступа к API и применяйте их в работе.

Используйте ключи API для доступа к Maps API

Мы рекомендуем использовать для аутентификации и доступа к Google Maps API именно ключи API. Доступ по идентификатору клиента по-прежнему поддерживается, однако ключи API позволяют точнее контролировать настройки безопасности. Так, действие ключа можно ограничить определенным веб-адресом, IP-адресом или мобильным SDK для Android или iOS. Подробные сведения о том, как создать и защитить ключи API для нужных API и SDK, например для Maps JavaScript API, можно найти на странице Использование ключа API.

Эффективность

Используйте экспоненциальную выдержку в случае ошибок

Если приложение слишком часто отправляет вызовы API (например, превышает допустимое количество запросов в секунду), это может приводить к ошибкам. В такой ситуации можно использовать экспоненциальную выдержку, чтобы система успевала обрабатывать запросы.

Экспоненциальная выдержка лучше всего подходит для устранения ошибок с кодами 5хх. Дополнительную информацию вы найдете в разделе обработки полученных кодов статуса HTTP.

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

Отправляйте запросы, предусматривающие взаимодействие с пользователем, только при выполнении определенных условий

Если запрос к API предусматривает взаимодействие с конечными пользователями, его стоит отправлять, только если пользователь выполнил определенное условие – например, нажал на элемент интерфейса (on-click). Запрос должен служить ответом на действие пользователя: загружать карту, задавать пункт назначения, показывать искомую информацию. При таком подходе к API поступает меньше ненужных запросов, и вы не тратите квоту напрасно.

Не используйте оверлеи при перемещении карты

Некоторые разработчики используют метод Draw(), чтобы показывать оверлеи со своим контентом на карте, когда пользователь ее перемещает. Мы не рекомендуем так делать. При каждом перемещении карта генерируется заново, и если в это время на ней будут оверлеи, это может привести к задержкам и перебоям в отрисовке карты. Поэтому добавляйте и удаляйте контент в оверлеях только после того, как пользователь закончит панорамировать карту или менять ее масштаб.

Не используйте в методах Draw ресурсоемкие операции

Как правило, в методах Draw() рекомендуется избегать ресурсоемких операций, не касающихся отрисовки. Например, не стоит включать в код Draw():

  • запросы, возвращающие большие объемы данных;
  • операции, инициирующие много изменений в данных на экране;
  • манипуляции с большим количеством объектов DOM.

Иначе скорость работы падает, а в отрисовке карты могут возникать задержки и перебои.

Используйте для маркеров растровые изображения

В качестве маркеров местонахождения на карте лучше использовать растровые изображения в формате PNG, JPG и др. Избегайте векторной графики (SVG-файлов): их отрисовка часто замедляет обновление карты.

Оптимизируйте маркеры

Оптимизация позволяет увеличить производительность, поскольку несколько маркеров отрисовываются как один статический элемент. Используйте эту функцию в системах с большим количеством маркеров. По умолчанию за оптимизацию отвечает Maps JavaScript API. Когда в системе много маркеров, эта функция применяется при их отрисовке. Если какие-либо маркеры оптимизировать не удалось, Maps JavaScript API будет отрисовать их без оптимизации. Отключите оптимизированную отрисовку для анимированных изображений GIF или PNG, а также в случаях, когда нужно отрисовывать каждый маркер в виде отдельного элемента DOM.

Используйте кластеры для управления маркерами

Чтобы вам было проще управлять маркерами местонахождения на карте, объединяйте их в кластеры с помощью библиотеки Marker Clusterer. Она позволяет настраивать:

  • размер сетки (количество маркеров в одном кластере);
  • максимальный масштаб кластера;
  • пути к изображениям, которые нужно использовать как значки маркеров.

Управление расходами

Чтобы эффективнее планировать бюджет и контролировать расходы, примите следующие меры:

  • Настройте оповещения о достижении определенной суммы затрат. Они не ограничивают использование API, а просто предупреждают вас о том, сколько вы потратили.
  • Ограничьте ежедневное использование API, чтобы контролировать расходы на платные сервисы. Для этого установите лимит на количество запросов в день. Этот лимит можно рассчитать по простой формуле, например: (расходы за месяц / цена за единицу) / 30 = допустимое количество запросов в день (для одного API). Если вы используете несколько платных API, рассчитайте лимиты для каждого. Также не забывайте, что каждый месяц вы получаете бонус на использование платформы Google Карт в размере 200 долларов США.
  • Создайте отдельные проекты, чтобы анализировать и отслеживать расходы на сервисы. Допустим, вы часто используете API платформы Google Карт для тестов. В этом случае рекомендуем настроить отдельный проект с ключами API и квотами, чтобы избежать ненужных затрат во время тестирования.

Контролируйте расходы на Maps API

Рекомендуем использовать по одной карте на страницу: как правило, пользователям вполне этого хватает. На одной карте можно показывать разные наборы данных в зависимости от действий и потребностей пользователя.

Используйте статические изображения

Запросы с использованием динамических карт и панорам в Просмотре улиц стоят дороже статических. Если ваше приложение не предполагает, что пользователь будет взаимодействовать с картой или панорамами (увеличивать, уменьшать, панорамировать), то лучше использовать статические версии API.

Другой способ сэкономить – это использовать уменьшенные статические карты и фото, которые по клику перенаправляют пользователя на динамическую версию со всеми возможностями Google Карт. Так вы будете платить меньше.

Используйте Maps Embed API

Этот API позволяет бесплатно использовать в приложении карту с одним маркером или динамическую карту. Если вам достаточно одного маркера и не требуется настраивать карту, Maps Embed API – хороший способ сэкономить. Обратите внимание, что теперь запросы к Maps Embed API с использованием режимов просмотра, поиска и маршрутов являются платными. Стоимость см. в таблице.

Используйте в мобильных приложениях пакеты SDK

Если вам нужно встроить карту в мобильное приложение, рекомендуем использовать Maps SDK для Android или iOS. Когда это невозможно, выбирайте Maps Static API или Maps JavaScript API.

Контролируйте расходы на Routes

Ограничьте количество путевых точек для Directions API

По возможности установите для запросов ограничение в 10 путевых точек. Если пользователь указывает больше точек, такие запросы стоят дороже.

Используйте для оптимизации маршрутов средства Directions API

Запросы, содержащие аргумент оптимизации путевых точек, стоят дороже. Подробнее…

Этот аргумент работает следующим образом. Допустим, у нас есть пять путевых точек: А, Б, В, Г и Д. Без оптимизации они могут располагаться в случайном порядке. Тогда маршрут будет выглядеть примерно так: А-Г-Б-В-Д. Аргумент оптимизации располагает путевые точки в наиболее эффективном порядке (А-Б-В-Г-Д), обеспечивая оптимальный маршрут из точки А в точку Д.

Используйте для Directions API и Distance Matrix API модели загруженности дорог в режиме реального времени

Запросы к Directions API и Distance Matrix API, содержащие модели загруженности дорог в режиме реального времени, стоят дороже. Чтобы использовать такую модель, задайте для времени отправления значение now.

Если не использовать в запросе модель загруженности, результаты рассчитываются исключительно на основе физических факторов: дорог, расстояния и ограничений скорости.

Используйте сервисы Route Traveled и Nearest Road, когда данные GPS неточны

В Maps Roads API есть дополнительные сервисы Route Traveled и Nearest Road, которые оплачиваются по повышенному тарифу. Они помогают выбрать верный маршрут, когда данные GPS неточны. Также в Roads API есть сервис Speed Limit, который доступен только для отслеживания объектов.

Настройте для сервиса Speed Limit интервал выборки местонахождений в 5–15 минут

Чтобы сократить количество запросов к этому сервису Maps Roads API, установите для определения местонахождений объектов временной интервал в 5–15 минут, в зависимости от скорости объекта. Если тот не движется, данных об одном местонахождении будет достаточно. Соответственно, вам понадобится только один вызов.

Для минимизации общей задержки рекомендуем сначала накопить данные, а затем вызывать сервис Speed Limit. Это эффективнее, чем вызывать API каждый раз при получении геоданных движущегося объекта.

Контролируйте расходы на Places

Оптимизируйте настройки Place Autocomplete

Чтобы оптимизировать затраты на использование Place Autocomplete:

  • в виджетах автозаполнения (JavaScript, Android, iOS) используйте маски полей, чтобы в ответ на запросы возвращались только нужные поля с данными о месте;

  • выберите вариант оплаты в соответствии с тем, как вы используете эту функцию. В зависимости от того, реализованы ли у вас сеансы автозаполнения, плата взимается либо за запрос, либо за сеанс.

Дополнительную информацию и советы, которые помогут вам выбрать подходящий вариант, можно найти в рекомендациях по оптимизации расходов на Place Autocomplete.

Указывайте в запросах к Place Details и Place Search определенные поля

В запросах к сервисам Place Details и Place Search можно указывать, какие поля вас интересуют. Все поля делятся на три категории: основные данные, контактная информация и данные об отзывах. Если не задать в запросе конкретные поля, он вернет информацию обо всех.

Стоимость запросов к Place Details зависит от типа и объема запрашиваемых данных. Соответственно, если не указывать конкретные поля, запросы возвращают сразу все доступные данные, и вы платите максимальную цену. Подробнее о сервисах Place Details и Place Search

Используйте Geocoding API для снижения расходов

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

Но если известен точный или почти точный адрес места, то для экономии средств можно использовать Geocoding API вместо автозаполнения. Подробнее…

Как работают квоты платформы Google Карт

Для всех наших API заданы ограничения по количеству вызовов, которые может совершать каждый клиент. Эти квоты действуют в пределах одной минуты. Если минута еще не прошла, а вызовы API израсходованы, то дальше данный API не будет вызываться до начала следующей минуты, пока не обновится квота.

В квоте учитываются только успешно выполненные запросы и запросы, вызывающие ошибки сервера. Запросы, не прошедшие аутентификацию, в нее не входят.

В некоторых Maps API помимо квоты за минуту применяется лимит на число запросов в секунду. Такое ограничение не гарантирует равномерного распределения запросов в течение всей минуты и не предотвращает превышения лимита за минуту. Однако оно помогает избежать случаев, когда установленная квота на количество запросов в минуту полностью расходуется в первые секунды. Этот лимит также защищает вас от возможных сбоев в работе при резких скачках трафика. Поэтому планируйте использование квот и учитывайте требования при настройке квот за минуту и за секунду.

Квоты на количество запросов за секунду применяются в следующих API в GMP: Directions API, Distance Matrix API, Elevation API, Geocoding API, Places API и Roads API.

Расчет суммы расходов по любому продукту платформы Google Карт на основе общего количества запросов