Ser*_*rov 8 javascript google-analytics
我在我的TypeScript代码中插入GA片段并看到:
i[r].l = 1 * new Date();
Run Code Online (Sandbox Code Playgroud)
TypeScript编译器抱怨新的Date()必须是数字或任何,但不是Date.
我把它变成了这个:
i[r]['l'] = new Date().getTime();
Run Code Online (Sandbox Code Playgroud)
这导致相同的结果.
如果优先考虑减小尺寸,那么我发现这个更紧凑,给出了相同的结果:
i[r]['l'] = +new Date();
Run Code Online (Sandbox Code Playgroud)
我不知道为什么使用带隐式转换的smart-ass变体.
有什么隐藏我不明白或只是男人想要看起来更聪明?它是否缩短了它的长度?
有什么隐藏我不明白......
不,这绝对是100%,只是为了缩短它的长度.
事实上,如果你看一下最新推荐的代码片段,它只使用+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>
Run Code Online (Sandbox Code Playgroud)
确实,许多短信和代码构建工具会抱怨这些类型的实践,并且有充分的理由.您可能不应该在源代码中使用这样的聪明技巧,因为它们更难以阅读,并不总是清楚它们的意图,令人困惑等等.
然而,几乎所有的minifier 确实使用它们来生成最有效的代码,并且它们在技术上绝对没有任何问题.
关键是你应该编写可读代码,然后依赖于minifier /编译器,使其尽可能小而有效.
但是,Google Analytics不能仅仅假设每个使用其代码段的人都会通过缩小器运行它,因此它会为开发人员提供预先缩小的代码段.
处理源文件中包含预先缩小的代码并避免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 */
Run Code Online (Sandbox Code Playgroud)