为什么在GA片段中使用1 * new Date()而不是新的Date()。getTime()?

时间:2016-11-02 10:57:41

标签: javascript google-analytics

我在我的TypeScript代码中插入GA snippet并看到:

i[r].l = 1 * new Date();

TypeScript编译器抱怨新的Date()必须是数字或任何,但不是Date。

我把它变成了这个:

i[r]['l'] = new Date().getTime();

导致相同的结果。

如果优先考虑的是减小尺寸,那么我会发现它更紧凑,结果相同:

i[r]['l'] = +new Date();

我不知道为什么使用带隐式转换的smart-ass变体。

有什么隐藏我不明白或只是男人想要看起来更聪明?它是否缩短了它的长度?

1 个答案:

答案 0 :(得分:8)

  

有什么隐藏我不明白......

不,这绝对是100%,只是为了缩短它的长度。

事实上,如果您查看the newest recommend snippet,它只使用+new Date,比您的+new Date()版本短两个字节:

<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'> </script>

确实,许多短信和代码构建工具会抱怨这些类型的实践,并且有充分的理由。您可能不应该在源代码中使用这样的聪明技巧,因为它们更难以阅读,并不总​​是清楚他们的意图,混淆等等。

然而,几乎每个的缩小器都使用它们来生成最有效的代码,并且它们在技术上绝对没有任何问题。

关键是你应该编写可读代码然后依赖于minifier /编译器来使它尽可能小而有效。

但是,谷歌分析不能仅仅假设每个使用其片段的人都会通过缩小器来运行它,因此它为开发人员提供了预先缩小的片段。

处理源文件中包含预先缩小的代码并避免linter / compiler警告的最常见方法是忽略整个块,这是几乎每个linter提供的功能。

例如,使用ESLint,您可以通过在块之前和之后直接放置注释来执行此操作(我在很多人的Google Analytics代码段中看到的内容) :

/*eslint-disable */
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
/*eslint-enable */