异步Google Analytics [Javascript Golf]

Dav*_*och 18 javascript google-analytics code-golf

不幸的是,这可能不是一个有效的Code-Golf问题,因为它可能只是Javascript; 然而,由于 这可能是现实世界中唯一有用的代码 - 高尔夫比赛, 我将继续发布它.


谷歌Analytics(分析)Asyncronous跟踪片段被许多网站使用.

脚本有点像这样:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _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>
Run Code Online (Sandbox Code Playgroud)

获胜者将通过最短RAW DEFLATE被确定(有 HTTP 1.1 DEFLATE(又名ZLIB)和RAW DEFLATE之间的差)由字节数压缩代码将加载和在页面上初始化异步谷歌分析.

在平局的情况下,获胜者将由原始字符数确定.如果我们还有领带,我们将根据提交的最后编辑/时间来决定.

一些规则:

  • gaq || []检查是不需要的,应该被删除.
  • 必须是协议"意识到"(http vs https).
  • 不得污染全局命名空间(_gaqvar 除外).
  • 必须可复制到任何(X)HTML文档,即不依赖于页面的标记.
  • 必须适用于所有A级浏览器.
  • 但这不是必须通过的JSLint或任何HTML验证.
  • 必须设置async标志.
  • 必须使用此平减器来确定压缩压缩输出的字节数.

小费:



UDPATE 216/275

由于我的原始版本已被打败,我将继续并在此处发布:
注意:这有一个错误,其中所有"http"请求的异步设置为false

(function(d,t,g){_gaq=[["_setAccount","UA-XXXXX-X"],["_trackPageview"]];g=d.createElement(t);g.src=(g.async=location.protocol[5]?"//ssl":"//www")+".google-analytics.com/ga.js";(t=d.getElementsByTagName(t)[0]).parentNode.insertBefore(g,t)})(document,"script")
Run Code Online (Sandbox Code Playgroud)

som*_*ome 7

更新了在FF3.6,Opera10,Chrome6,MSIE8中测试的版本:

194/270:使用异步,缓存getElementsByTagName

(_gaq=document.createElement("script")).src=(/^....s/.test(location)?"//ssl":"//www")+".google-analytics.com/ga.js",(_gaq.a=_gaq.async=document.getElementsByTagName("script")[0]).parentNode.insertBefore(_gaq,_gaq.a),_gaq=[["_setAccount","UA-XXXXX-X"],["_trackPageview"]]
Run Code Online (Sandbox Code Playgroud)

192/297:使用异步,没有缓存

(_gaq=document.createElement('script')).src=(/^....s/.test(location)?'//ssl':'//www')+'.google-analytics.com/ga.js',_gaq.async=document.getElementsByTagName('script')[0].parentNode.insertBefore(_gaq,document.getElementsByTagName('script')[0]),_gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]
Run Code Online (Sandbox Code Playgroud)

189/259:没有异步,缓存了getElementsByTagName

(_gaq=document.createElement('script')).src=(/^....s/.test(location)?'//ssl':'//www')+'.google-analytics.com/ga.js',(_gaq.a=document.getElementsByTagName('script')[0]).parentNode.insertBefore(_gaq,_gaq.a),_gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]
Run Code Online (Sandbox Code Playgroud)

188/286:没有异步,没有缓存

(_gaq=document.createElement('script')).src=(/^....s/.test(location)?'//ssl':'//www')+'.google-analytics.com/ga.js',document.getElementsByTagName('script')[0].parentNode.insertBefore(_gaq,document.getElementsByTagName('script')[0]),_gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]
Run Code Online (Sandbox Code Playgroud)

184/242,没有async,appendChild(不需要缓存),如果它在任何地方都受支持,则不知道

(_gaq=document.createElement('script')).src=(/^....s/.test(location)?'//ssl':'//www')+'.google-analytics.com/ga.js',document.getElementsByTagName('script')[0].parentNode.appendChild(_gaq),_gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]
Run Code Online (Sandbox Code Playgroud)

积分:

  • 卡萨布兰卡:/^https/.test(location)
  • matyr:相对路径,语句之间的逗号,async的赋值
  • some:没有_gaq的匿名函数和用法,getElementsByTagName的非缓存,移动async的赋值,/^....s /
  • 大卫默多克下降type="text/javascript"

此外,如果您使用"引用标记属性" ,更改'"可以改进HTML源中的压缩".

有关更多信息,请参阅此帖子的评论

由于这篇文章现在是社区维基和接受的答案,我删除了我的第一次尝试(如果您感兴趣,可以在修订历史中找到它们)并且只能看到最新版本.有关详细信息,请参阅此帖子中的评论./ 一些