Googleマップを遅延表示してページの表示速度を改善します。GoogleマップはGoogle Maps APIを利用せず、通常のiframeタグを埋め込んで表示します。
htmlのコードです。外側のクラス名map_wrapのdivタブはレスポンシブ用です。ポイントはクラス名js-mapの空のdivタグにカスタムデータ属性を設定する部分です。属性名はdata-mapとし、Googleマップ埋め込み用のiframeタグをそのまま設定します。ただしレスポンシブ用にwidth=”100%”、height=”auto”に変更しています。
<div class="map_wrap">
<div class="js-map" data-map='<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3240.6991708523014!2d139.70088971555094!3d35.68440863740457!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188cc6e5e95555%3A0xeabec3409c3087df!2zTlRU44OJ44Kz44Oi5Luj44CF5pyo44OT44Or77yI44OJ44Kz44Oi44K_44Ov44O877yJ!5e0!3m2!1sja!2sjp!4v1602083170798!5m2!1sja!2sjp" width="100%" height="auto" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>'></div>
</div>
続いてCSSのコードです。iframeタグにYoutubeのアスペクト比16:9と同様のレスポンシブ対応をしています。これでスマホ表示でも縦横比が維持されます。(※Googleマップにアスペクト比は関係ありません。)
.map_wrap {
position: relative;
padding-top: 56.25%;
}
.map_wrap iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
最後にjQueryのコードです。
GoogleマップはsetTimeoutで1秒後の遅延表示にします。dataメソッドでカスタムデータ属性data-mapに設定したGoogleマップ埋め込み用のiframeタグを取得し、afterメソッドでクラス名js-mapの空のdivタグの直後に追加します。
function asyncGoogleMap() {
$('.js-map').each(function () {
var map = $(this).data('map');
$(this).after(map);
});
}
setTimeout(function() {
asyncGoogleMap();
}, 1000);
Googleマップの遅延表示ありのページとなしのページをGoogleのPageSpeed Insightsで比較してみます。遅延表示ありのページはモバイルで「次世代フォーマットでの画像の配信」の項目が改善され、わずかながらページの表示速度が速くなっています。