【发布时间】:2023-04-01 18:31:01
【问题描述】:
这是 Google 的异步分析跟踪代码:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXX-Y']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
如果你问我这很丑陋。它可以浓缩成这样(来源:Mathias):
<script>
var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
s.parentNode.insertBefore(g,s)}(document,'script'));
</script>
但是为什么我们不能只使用 HTML5 的 async 属性和 protocol-relative URL 呢?
<script src="//www.google-analytics.com/ga.js" async></script>
<script>var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];</script>
使用相对于协议的 URL,我们不必检查 location.protocol,async 属性应该负责 modern browsers 中的不显眼加载,并且会在其他地方优雅地降级。
这样不是更好吗?
【问题讨论】:
标签: javascript html asynchronous google-analytics lazy-loading