Удалите блокирующий визуализацию JavaScript для карт Google


PageSpeed Insights показывает мне, что я должен удалить блокировку рендеринга для своих карт Google js. Он добавлен в содержимое cms, и это код:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=myipcode">// <![CDATA[

// ]]></script>
<script type="text/javascript">// <![CDATA[
function initialize() {
  var myLatlng = new google.maps.LatLng(mycoord1, mycoord2);
  var mapOptions = {
    zoom: 17,
    center: myLatlng
  }
  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'My Title'
  });
}

Google.maps.event.adddomlistener (окно, "загрузить", инициализировать); // ]]>

 

Если я добавлю async="async" в карты не загружены, но сообщение от pagespeed не отображается. Что мне делать?

Author: Attila Naghi, 2015-10-16

1 answers

Попробуйте выполнить следующее

<div id="map"></div>

<script type="text/javascript">
function initializeMap() {
  var myLatlng = new google.maps.LatLng(mycoord1, mycoord2);
  var mapOptions = {
    zoom: 17,
    center: myLatlng
  }
  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

  var marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'My Title'
  });
}
</script>

<script src="https://maps.googleapis.com/maps/api/js?key=myipcode&callback=initializeMap"
        async defer></script>

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

Я бы не советовал использовать initialize в качестве имени метода, поскольку оно довольно общее и может использоваться в других местах

 6
Author: Sander Mangel, 2015-10-16 09:51:43