На этой страниц�� п��речислены известные проблемы и решения для векторных карт и функций WebGL.
Поддержка браузеров и устройств
Предварительная версия функции WebGL поддерживает те же браузеры и устройства, что и Maps JavaScript API. Чтобы узнать, будет ли браузер на определенном устройстве поддерживать WebGL, посетите get.webgl.org или caniuse.com. Также убедитесь, что в настройках браузера включено аппаратное ускорение. Если оно отключено, векторные карты будут преобразованы в растровые.
Растровая карта или векторная?
В некоторых случаях векторная карта может быть преобразована в растровую. При этом функции, характерные для векторных карт, становятся недоступны. Причины такого преобразования могут быть разными. Ниже рассказывается, как правильно настроить браузер и программно проверить наличие возможностей, необходимых для ��екторной карты.
Как проверить возможности браузера Chrome
Чтобы проверить, какие возможности аппаратного ускорения используются в определенной установке браузера Chrome, откройте страницу chrome://gpu/ и посмотрите, включены ли (отмечены ли зеленым цветом) следующие настройки:
- OpenGL: Enabled
- WebGL: Hardware accelerated
- WebGL2: Hardware accelerated
Это лишь базовые требования. О других факторах, влияющих на поддержку браузеров, читайте в разделе "Известные ошибки" ниже.
Как включить аппаратное ускорение
Чтобы векторные карты поддерживались, в большинстве браузеров необходимо включить аппаратное ускорение. В браузерах Chrome и Microsoft Edge для этого нужно открыть раздел Настройки, выбрать в меню пункт Система и включить настройку Использовать аппаратное ускорение (при наличии).
Как программно проверить тип карты
Проверить, растровая карта или векторная, можно с помощью метода map.getRenderingType()
. Ниже приведен пример кода, который отслеживает событие renderingtype_changed
и выводит информационное окно, где указан тип карты.
TypeScript
/** * This example creates a map with an info window that shows whether * the map render type is raster or vector. */ function initMap() { const center = {lat: 0, lng: 0}; const map = new google.maps.Map(document.getElementById('map') as HTMLElement, { center, zoom: 10, heading: 0.0, tilt: 0.0, // Map ID for a vector map. mapId: '6ff586e93e18149f', }); const canvas = document.createElement("canvas"); const infoWindow = new google.maps.InfoWindow({ content: '', ariaLabel: 'Raster/Vector', position: center, }); infoWindow.open({ map, }); map.addListener('renderingtype_changed', () => { infoWindow.setContent(`${map.getRenderingType()}`); }); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
/** * This example creates a map with an info window that shows whether * the map render type is raster or vector. */ function initMap() { const center = { lat: 0, lng: 0 }; const map = new google.maps.Map(document.getElementById("map"), { center, zoom: 10, heading: 0.0, tilt: 0.0, // Map ID for a vector map. mapId: "6ff586e93e18149f", }); const canvas = document.createElement("canvas"); const infoWindow = new google.maps.InfoWindow({ content: "", ariaLabel: "Raster/Vector", position: center, }); infoWindow.open({ map, }); map.addListener("renderingtype_changed", () => { infoWindow.setContent(`${map.getRenderingType()}`); }); } window.initMap = initMap;
Вы также можете использовать контекст отрисовки WebGL, чтобы проверить, поддерживается ли WebGL 2.
const canvas = document.createElement("canvas");
canvas.getContext("webgl2") ? console.log("WebGL 2 is supported") : console.log("WebGL 2 is NOT supported");
Узнайте, как ещё можно программно определить контекст отрисовки WebGL.
Поддержка мобильных устройств
Поддержка векторных карт в браузерах на мобильных устройствах в настоящий момент является экспериментальной. Разработчики могут выявлять такие браузеры с помощью API клиентов и использовать идентификатор карт, связанный с растровой картой, а не векторной. На некоторых мобильных устройствах ожидается более медленная отрисовка. Если вы решите использовать векторные карты на мобильном сайте, мы будем благодарны за статистику по производительности и отзывы. Как и в описанном выше случае, если векторные карты не поддерживаются на устройстве, при использовании идентификатора векторной карты будет автоматически показана растровая карта.
Ошибки
Известные ошибки
- Ошибка в браузере Chrome на некоторых устройствах macOS с графическими процессорами AMD. Может доставлять сильные неудобства, когда на устройстве macOS установлено несколько графических процессоров, переключение между которыми происходит автоматически (векторные карты становятся недоступны, когда запущены другие приложения или ��од��лючен в��е��ний ��онитор). Во многих случаях ошибку удавалось устранить за счет серверного кода Metal для ANGLE. О планах развертывания этого кода можно узнать по ссылке https://bugs.chromium.org/p/chromium/issues/detail?id=1322521.
Как сообщить о проблеме
- Прежде чем сообщать о проблеме, обновите браузер и драйвер графического процессора до последней версии.
- Убедитесь, что на странице
chrome://settings/system
(Chrome),about:preferences#general
(Firefox) илиedge://settings/system
(Microsoft Edge) включено аппаратное ускорение. В браузере Safari оно используется по умолчанию в macOS версии 10.15 или выше. В более ранних версиях macOS проверьте переключатель "Использовать аппаратное ускорение" в расширенных настройках Safari. - Добавьте в отчет об ошибке ссылку на пример кода JSFiddle.
- Если у вас возникли проблемы с отрисовкой, добавьте также скриншот страницы
chrome://gpu
(Chrome),about:support
(Firefox) илиedge://gpu
(Microsoft Edge) и сведения о графическом процессоре.
Поделитесь своим мнением
Мы тщательно изучаем ваши отзывы, чтобы усовершенствовать векторные карты. Просим сообщить нам, если:
- В ваших веб-приложениях возникнут новые ошибки JavaScript или другие ошибки или сбои.
- Задержка запуска для векторных карт значительно больше, чем для растровых. Для ее анализа полезно использовать показатели регрессии задержки запуска. В целом нас интересует, выходит ли задержка за допустимые пределы.
- При работе с векторными картами отрисовка выполняется не очень плавно. Как соотносятся ваши показатели частоты кадров в секунду или временного зависания для векторных и растровых карт?
- Производительность сильно различается в разных браузерах.
Если вы провели A/B-тестирование, просим поделиться результатами оценки производительности векторных карт относительно растровых – они будут очень полезны для усовершенствования этой функции.