Pull to refresh

Полное зависание окна браузера при использовании API Яндекс.Карт — неожиданные причины и решение

Хочу рассказать вам об одной нетривиальной проблеме, которая возникла при встраивании Яндекс.Карт в простенький лендинг.

Суть проблемы заключается в том, что по неведомым вначале причинам страница проекта после загрузки вызывала полное зависание вкладок любого браузера на любой ОС (а Edge и Internet Explorer вообще умирали целиком). Началось всё после того, как я полностью закончил вёрстку макета и занялся установкой карт Яндекса в подвал. Выглядит это вот так:




После первой установки и обнаружения проблемы я предположил, что загвоздка кроется в изменённом балуне, который мне пришлось самостоятельно модифицировать для вывода информации об автобусах и троллейбусах (Яндекс не предоставляет этой информации через АПИ, что кажется очень удивительным). Код, который я использовал:

ymaps.ready(init);
var myMap,
	myPlacemark;
function init(){     
   myMap = new ymaps.Map("map", {
      center: [53.909442,27.518061],
      zoom: 15,
      controls: ['zoomControl']
});
myMap.balloon.open(
	// Позиция балуна
	[53.910594,27.517106], {
	contentBody: 'улица Скрыганова, 6А, офис 306',
	contentHeader: 'MHELP.BY',
	contentFooter: 'Остановка «Улица Пинская»<br/>
<div style="background: url(https://yastatic.net/maps-beta/_/2XqdjYF8AFGKoFR1CIw9M4k8Z4c.svg) left no-repeat; padding-left: 25px; font-weight: bold; margin-top: 5px;">Автобусы:</div>
<div style="background: #eee; border-radius: 10px; padding: 5px; text-align: center; margin-top: 5px;">163, 40, 46, 50с, 78</div>
<div style="background: url(https://yastatic.net/maps-beta/_/AdmP0yxnlQsPwV_0yYc2FUuZvwc.svg) left no-repeat; padding-left: 25px; font-weight: bold; margin-top: 5px; margin-bottom: 5px;">Троллейбусы:</div>
<div style="background: #eee; border-radius: 10px; padding: 5px; text-align: center;">13, 4, 44, 57, 7, 9</div>'
	}, {
        closeButton: false
        });					
    }


Однако удаление результатов моей самодеятельности не помогло решить проблему — страница по-прежнему зависала вместе с браузером сразу после загрузки. Я даже не имел возможности банально посмотреть ошибки в консоли яваскрипта. Тем не менее, методом тыка было обнаружено, что проблема исчезает, если встраивать карту без использования любых балунов (не важно, открыты они изначально или закрыты). «Уже что-то», — подумал я и продолжил гуглить информацию по своей проблеме, однако нигде ничего даже близко похожего не нашёл.

Совсем отчаявшись и потратив на разбор этого бага примерно часа два, от безысходности я начал ковыряться во всём, что так или иначе имеет отношение к макету. И сам не знаю каким чудом, но обратил внимание на этот кусок CSS:

*{
-webkit-transition: all 0.3s ease;
-moz-transition: all 0.3s ease;
-o-transition: all 0.3s ease;
-ms-transition: all 0.3s ease;
transition: all 0.3s ease;
}


Мне известно, что лучше не использовать глобально такие свойства, но я всё же позволял себе делать это для мягкой анимации различных переходов и изменения цвета, если страница не сильно перегружена элементами управления и кнопками. Удалил этот кусок без особой надежды на успех. О чудо! Страница перестала зависать, карты стали отлично грузиться и всё заработало так, как должно.

Для сомневающихся я приготовил пример на JSFiddle с дефолтным кодом встраивания Яндекс.Карт с балуном, взятым из официальной песочницы и кодом для глобальных анимаций в CSS. Страница зависнет сразу после загрузки карт.

Если кто-нибудь из прочитавших статью знает, почему это вообще происходит, буду признателен за объяснение.

Спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.