WebPerf et Google Tag Manager … présenté comme ça on est sur 2 notions qui n’ont pas grand chose à voir.

Mais une micro bidouille récente nous a permis un gain des plus intéressants : GTM, ce n’est pas seulement un bout de JS a charger, c’est surtout un gros pavé à exécuter.

Or par défaut l’ancre servant au déploiement de GTM propose la structure suivante :

<!-- Google Tag Manager -->
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WVMKMC');
</script>
<!-- End Google Tag Manager -->

Et un détail qui fait tout : l’attribut async=true. C’est une très délicate attention qui peut s’avérer optimisable au cas par cas. En effet, passer plutôt à « defer=true » nous a permis de gagner 2 secondes à l’affichage de page :

Comparaison des temps de chargement

C’est diablerie ? Non, tout simplement que defer retarde l’exécution du bloc JS à la fin de l’analyse html.

<!-- Google Tag Manager -->
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.defer=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WVMKMC');
</script>
<!-- End Google Tag Manager -->

Et c’est risqué ? A vrai dire, pas de trace de cette solution du coté de la doc officielle. J’imagine donc qu’au cas par cas, il vaut mieux s’assurer de l’ordre de passage de ses événements (par exemple, les pages vues sont potentiellement envoyées plus tardivement, ce qui mécaniquement pourrait gonfler les chiffres de Page Drop). Chez nous aucun souci, tout part comme avant, et le CPU des visiteurs les moins bien équipés n’est plus pris en otage par GTM.

Et on y gagne quoi ? Globalement Google et les internautes aiment avoir une page qui s’affiche vite …