В этом руководстве описываются несколько стратегий оптимизации использования API Карт Google с точки зрения безопасности, производительности и потребления.
Безопасность
Обзор лучших практик безопасности
Ключи API — это учетные данные, ориентированные на проект, которые заслуживают тех же мер предосторожности, что и идентификаторы пользователей и пароли. Ознакомьтесь с рекомендациями по безопасности API, чтобы защитить свои ключи от непреднамеренного использования, которое может привести к неправомерному использованию квоты и непредвиденным списаниям средств с вашей учетной записи.
Использование ключей API для доступа к API Карт
Ключи API являются предпочтительным методом аутентификации для доступа к API API Карт Google. Хотя использование идентификаторов клиентов в настоящее время все еще поддерживается, ключи API поддерживают более детальные элементы управления безопасностью и могут быть настроены для работы с определенными веб-адресами, IP-адресами и мобильными SDK (Android и iOS). Для получения информации о создании и защите ключа API перейдите на страницу «Использование ключа API» для каждого API или SDK. (Например, информацию об API JavaScript Карт можно найти на странице «Использование ключа API» .)
Производительность
Использование экспоненциальной задержки для обработки ошибок
Если в ваших приложениях возникают ошибки из-за чрезмерных попыток вызвать API в течение короткого периода времени, например ошибки квоты, рассмотрите возможность использования экспоненциальной задержки , чтобы позволить обрабатывать запросы.
Экспоненциальная отсрочка наиболее полезна при ошибках размером 500 с. Дополнительные сведения см. в разделе Обработка кодов состояния возврата HTTP .
В частности, отрегулируйте темп ваших запросов. Добавьте в свой код период ожидания в S
секунд между запросами. Если запрос по-прежнему приводит к ошибке квоты, удвойте период ожидания, а затем отправьте еще один запрос. Продолжайте корректировать период ожидания, пока запрос не вернется без ошибки.
Отправка запросов на взаимодействие с пользователем по требованию
Запросы к API, включающие взаимодействие с пользователем, следует отправлять только по требованию. Это означает ожидание, пока конечный пользователь выполнит действие (например, on-click
), чтобы инициировать запрос API, а затем использование результатов для загрузки карты, установки пункта назначения или отображения соответствующей информации. Использование подхода по требованию позволяет избежать ненужных запросов к API, сокращая потребление API.
Как избежать отображения наложенного контента при движении карты
Избегайте использования Draw()
для отображения пользовательского содержимого наложения на карте в то время, когда пользователь может перемещать карту. Поскольку карта перерисовывается каждый раз, когда пользователь ее перемещает, одновременное размещение наложенного содержимого на карте может вызвать задержку или визуальное заикание. Добавляйте или удаляйте наложенный контент с карты только после того, как пользователь прекратит панорамирование или масштабирование.
Избегание интенсивных операций в методах Draw
Как правило, рекомендуется избегать ресурсоемких операций, не связанных с рисованием, в методе Draw()
. Например, избегайте следующего в коде метода Draw()
:
- Запросы, возвращающие большой объем контента.
- Множество изменений в отображаемых данных.
- Управление многими элементами объектной модели документа (DOM).
Эти операции могут снизить производительность и вызвать задержку или визуальное зависание при рендеринге карты.
Использование растровых изображений для маркеров
Используйте растровые изображения, например изображения в формате .PNG или .JPG, при добавлении маркеров для определения местоположения на карте. Избегайте использования изображений масштабируемой векторной графики (SVG), так как рендеринг изображений SVG может привести к задержке при перерисовке карты.
Оптимизация маркеров
Оптимизация повышает производительность за счет отображения множества маркеров как одного статического элемента. Это полезно в тех случаях, когда требуется большое количество маркеров. По умолчанию Maps JavaScript API решает, будет ли оптимизирован маркер. При наличии большого количества маркеров API JavaScript Карт попытается отобразить маркеры с оптимизацией. Не все маркеры можно оптимизировать; в некоторых ситуациях Maps JavaScript API может потребоваться отображать маркеры без оптимизации. Отключите оптимизированный рендеринг для анимированных изображений GIF или PNG, а также когда каждый маркер должен отображаться как отдельный элемент DOM.
Создание кластеров для управления отображением маркеров
Чтобы управлять отображением маркеров для определения местоположений на карте, создайте кластер маркеров с помощью библиотеки Marker Clusterer . Библиотека Marker Clusterer включает опции для:
- Размер сетки, чтобы указать количество маркеров, которые нужно сгруппировать в кластер.
- Максимальный масштаб, чтобы указать максимальный уровень масштабирования для отображения кластера.
- Пути к изображениям для использования графических изображений в качестве значков маркеров.
Потребление
Чтобы спланировать бюджет и контролировать расходы, сделайте следующее:
- Установите оповещение о бюджете , чтобы отслеживать, как ваши расходы приближаются к определенной сумме. Установка бюджета не ограничивает использование API — он предупреждает вас только тогда, когда ваши расходы приближаются к указанной вами сумме.
Ограничьте ежедневное использование API , чтобы управлять расходами на оплачиваемые API. Установив ограничения на количество запросов в день , вы можете ограничить свои расходы. Используйте простое уравнение, чтобы определить дневной лимит в зависимости от того, сколько вы хотите потратить: (месячная стоимость/ цена за каждый )/30 = количество запросов в день (для одного API). В вашей конкретной реализации может использоваться несколько оплачиваемых API, поэтому при необходимости скорректируйте уравнение. Ежемесячно предоставляется кредит на API Карт Google в размере 200 долларов США , поэтому учтите это в своих расчетах.
Используйте несколько проектов, чтобы изолировать, расставлять приоритеты и отслеживать использование. Например, предположим, что вы регулярно используете API платформы Google Maps в своих тестах. Создав для тестирования отдельный проект с собственными квотами и ключами API, вы сможете тщательно протестировать, обезопасив себя от неожиданных перерасходов.
Управление потреблением в Картах
Использование одной карты на странице — хороший способ оптимизировать отображение карт, поскольку пользователи обычно взаимодействуют только с одной картой одновременно. Ваше приложение может манипулировать картой для отображения различных наборов данных в зависимости от взаимодействия с клиентом и его потребностей.
Использование статических изображений
Запросы, использующие динамические изображения (динамические карты и динамический просмотр улиц), стоят дороже, чем статические карты и статический просмотр улиц. Если вы не предполагаете взаимодействие пользователя с картой или просмотром улиц (масштабирование или панорамирование), используйте статические версии этих API.
Миниатюры — очень маленькие карты и фотографии — еще одно хорошее применение статических карт и статического просмотра улиц. Эти элементы оплачиваются по более низкой ставке и при взаимодействии с пользователем (по щелчку мыши) и могут привести пользователей к динамической версии для полноценного использования Карт Google.
Использование API для встраивания карт
Вы можете использовать Maps Embed API, чтобы бесплатно добавить карту с одним маркером или динамическую карту. Используйте Maps Embed API для приложений, где не требуется один маркер и не требуется настройка карты. За запросы Maps Embed API, использующие режимы «Маршруты», «Просмотр» или «Поиск», будет взиматься плата (подробную информацию см. в таблице цен ).
Использование SDK мобильных карт для мобильных приложений
Для мобильных приложений при отображении карты используйте Maps SDK для Android или Maps SDK для iOS. Используйте Maps Static API или Maps JavaScript API, если требования исключают использование мобильных SDK.
Управление потреблением в маршрутах
Ограничение маршрутных точек API маршрутов
По возможности ограничьте количество пользовательских записей в запросе максимум 10 путевыми точками. Запросы, содержащие более 10 путевых точек, тарифицируются по более высокому тарифу.
Использование оптимизации Directions API для оптимального маршрутизации
Запросы, использующие аргумент оптимизации путевых точек, оплачиваются по более высокой ставке. Дополнительную информацию см. в разделе «Оптимизация маршрутных точек» .
Аргумент оптимизации сортирует путевые точки для обеспечения оптимального маршрута, а это означает, что путешествие от A до E более удобно при оптимизации (ABCDE) по сравнению со случайной последовательностью неоптимизированного маршрута (например, ADBCE).
Использование моделей трафика в реальном времени в Directions API и Distance Matrix API.
Запросы Directions API и Distance Matrix API, включающие модели трафика в реальном времени, оплачиваются по более высокой ставке. Модели трафика в реальном времени активируются, если установить время отправления на now
.
Если модели трафика не включены в запрос, результаты основаны исключительно на физических факторах: дорогах, расстоянии и ограничениях скорости.
Использование пройденного маршрута и ближайшей дороги, если данные GPS неточны
Функции Maps Roads API, «Пройденный маршрут» и «Ближайшая дорога», включены в расширенный уровень и оплачиваются по более высокому тарифу. Используйте эти функции, если данные GPS неточны, и API дорог может помочь определить правильную дорогу. Ограничения скорости, еще одна функция Roads API, доступна только клиентам Asset Tracking.
Выборка мест ограничения скорости с интервалом от 5 до 15 минут.
Чтобы свести к минимуму количество вызовов службы ограничения скорости Maps Roads API, проверяйте местоположения своих объектов с интервалом от 5 до 15 минут. Точное значение зависит от скорости, с которой движется актив. Если актив неподвижен, достаточно одной выборки местоположения. Нет необходимости совершать несколько звонков.
Чтобы свести к минимуму общую задержку, вызывайте службу ограничения скорости после того, как накопите некоторые данные, а не вызывайте API каждый раз, когда получено местоположение мобильного объекта.
Управление потреблением в Places
Оптимизация реализации автозаполнения мест
Чтобы оптимизировать затраты на использование автозаполнения мест:
используйте маски полей в виджетах автозаполнения JavaScript , Android и iOS , чтобы возвращать только те поля данных о месте, которые вам нужны.
Выбор вариантов выставления счетов зависит от вашего варианта использования. В зависимости от того, использует ли ваша реализация сеансы автозаполнения или нет, с вас будет взиматься плата либо за автозаполнение — по запросу , либо за автозаполнение — за сеанс .
Дополнительные сведения и рекомендации по выбору подходящего варианта для вашего варианта использования см. в разделе «Рекомендации по оптимизации затрат на автозаполнение мест» .
Возврат данных для определенных полей в запросах Place Details и Place Search.
Вы можете настроить запросы сведений о месте и поиска места так, чтобы они возвращали данные для определенных полей, используемых в вашем приложении. Эти поля разбиты на категории: «Основные» , «Контакт» и «Атмосфера» . Запросы, в которых не указаны никакие поля, получат данные для всех полей.
Оплата за запросы сведений о месте зависит от типов и объемов запрашиваемых данных. Запросы, в которых не указаны никакие поля, будут оплачиваться по полной ставке. Дополнительную информацию см. в разделе «Сведения о месте» и «Поиск места» .
Сокращение затрат за счет использования API геокодирования
Если ваше приложение обрабатывает адреса, введенные пользователем, адреса иногда бывают неоднозначными (неполными, с ошибками или плохо отформатированными). Устраните неоднозначность адресов с помощью автозаполнения, а затем используйте идентификаторы мест, чтобы получить их местоположения.
Однако если у вас есть точный адрес (или близкий к нему), вы можете сократить расходы, используя геокодирование вместо автозаполнения. Дополнительные сведения см. в разделе «Рекомендации по геокодированию адресов» .
Как работают квоты платформы Google Maps
Все наши API имеют ограничения на количество вызовов, которые может совершить каждый клиент. Эти квоты настраиваются на поминутной основе. Как только вы достигнете квоты вызовов данного API за минуту, будущие вызовы не будут приниматься до следующей минуты.
В квоту засчитываются только успешные запросы и запросы, вызывающие ошибки сервера. Запросы, не прошедшие проверку подлинности, не учитываются в квоте.
Оцените свои затраты на любой продукт GMP API, исходя из общего объема запросов .