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

Стратегии оптимизации

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

Изучите рекомендации по обеспечению безопасности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оптимизация использования API

Отслеживайте и ограничивайте использование API

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

Карты

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

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

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

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

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

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

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

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

Маршруты

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

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

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

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

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

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

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

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

Когда данные GPS неточны, используйте функции пройденного маршрута и ближайшей дороги

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

Настройте для функции "Ограничения скорости" интервал выборки местонахождений в 5–15 минут

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

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

Места

Используйте вариант автозаполнения, подходящий именно вашему приложению

У функции автозаполнения есть два варианта. Оба стоят одинаково. Рекомендуем выбрать именно тот, который больше всего вам подходит. Они отличаются тем, какие возможности API требуются конечным пользователям приложения.

  • Автозаполнение по запросам подойдет в случаях, когда достаточно введения одной записи (например, при заполнении формы с почтовым адресом).
  • Автозаполнение по сеансам оптимально, когда требуется вводить несколько записей (например, при поиске отеля или ресторана).

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

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

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

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

Используйте Geocoding API, чтобы сэкономить

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

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