当前位置:  开发笔记 > 编程语言 > 正文

异步Google Analytics [Javascript Golf]

如何解决《异步GoogleAnalytics[JavascriptGolf]》经验,为你挑选了1个好方法。

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


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

脚本有点像这样:


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

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

一些规则:

gaq || []检查是不需要的,应该被删除.

必须是协议"意识到"(http vs https).

不得污染全局命名空间(_gaqvar 除外).

必须可复制到任何(X)HTML文档,即不依赖于页面的标记.

必须适用于所有A级浏览器.

但这不是必须通过的JSLint或任何HTML验证.

必须设置async标志.

必须使用此平减器来确定压缩压缩输出的字节数.

小费:

了解DEFLATE算法的基础知识.更重要的是,LZ77压缩.



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")

some.. 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"]]

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']]

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']]

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']]

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']]

积分:

卡萨布兰卡:/^https/.test(location)

matyr:相对路径,语句之间的逗号,async的赋值

some:没有_gaq的匿名函数和用法,getElementsByTagName的非缓存,移动async的赋值,/^....s /

大卫默多克下降type="text/javascript"

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

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

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



1> some..:

更新了在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"]]

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']]

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']]

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']]

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']]

积分:

卡萨布兰卡:/^https/.test(location)

matyr:相对路径,语句之间的逗号,async的赋值

some:没有_gaq的匿名函数和用法,getElementsByTagName的非缓存,移动async的赋值,/^....s /

大卫默多克下降type="text/javascript"

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

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

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

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有