@MegaPuxapb

Ускорить время загрузки скрипта?

На страничке есть скрипт, определяет и выводит город посетителя.
Его как то ускорить можно?

<script defer src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
    <script defer>
        window.onload = function () {
            var city = ymaps.geolocation.city;
            document.getElementById("city_user").innerHTML = city;
        }
    </script>
  • Вопрос задан
  • 141 просмотр
Решения вопроса 2
Ну смотрите, window.onload будет запущен только когда все ресурсы будут загружены. То есть после загрузки шрифтов, изображений, стилей и т.п. Но для показа города вам нужна только карта, и элемент city_user

Как вариант, поместить код в callback функции ymaps.ready(), он вызовет ваш код, когда будет загружена карта, а сам скрипт поместите после создания элемента city_user, ну или просто создайте его динамически.
Как то так:

<div id="city_user"></div>
<!-- Скрипт ниже элемента -->
<script>
ymaps.ready(() => {
    var city = ymaps.geolocation.city;
    document.getElementById("city_user").innerHTML = city;
});
</script>


Скрипт будет запущен как только отрендерится элемент, а если это произойдет раньше, чем загрузиться api карты, то подождет.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Версия 2.0 уже слегка устарела, сейчас актуальная 2.1.
В вопросе загружается полная (стандартная) версия библиотеки, т.е. там всё для отрисовки карт и пр. Если нужно только геокодирование, можно указать модули geocode и geolocation – должно быть полегче:
<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&load=geolocation,geocode"></script>


Затем остаётся запросить положение пользователя и перевести его в locality – город/село:
ymaps.geolocation.get()
  .then(
    result => {
      const pos = result.geoObjects.position;
      return ymaps.geocode(pos, {
        kind: 'locality'
      });
    },
    err => console.log('Ошибка 1: ' + err)
  )
  .then(
    result => {
      const city = result.geoObjects.get(0).properties.get('name');
      document.getElementById('city').innerText = city;
    },
    err => console.log('Ошибка 2: ' + err)
  )
  .catch(err => console.log('Errrr', err));


jsFiddle
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы