Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么piwik跟踪脚本通常不直接包含在页面上?_Javascript_Google Analytics_Analytics_Web Analytics_Matomo - Fatal编程技术网

Javascript 为什么piwik跟踪脚本通常不直接包含在页面上?

Javascript 为什么piwik跟踪脚本通常不直接包含在页面上?,javascript,google-analytics,analytics,web-analytics,matomo,Javascript,Google Analytics,Analytics,Web Analytics,Matomo,Piwik(分析软件)的工作原理是在之前加入一个小脚本: 变量| paq=| paq |[]; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (功能(){ var u=“//piwik.example.com”; _push(['settrackerrl',u+'piwik.php']); _paq.push(['setSiteId',1]); var d=document,g=d.createElement(

Piwik(分析软件)的工作原理是在
之前加入一个小脚本:


变量| paq=| paq |[];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(功能(){
var u=“//piwik.example.com”;
_push(['settrackerrl',u+'piwik.php']);
_paq.push(['setSiteId',1]);
var d=document,g=d.createElement('script'),s=d.getElementsByTagName('script')[0];
g、 type='text/javascript';g.async=true;g.defer=true;g.src=u+'piwik.js';s.parentNode.insertBefore(g,s);
})();
然后,该脚本将包含页面上piwik安装中的
piwik.js
(基本上)
piwik.js
记录一些内容(屏幕大小、ip等),并在GET请求中将其发送到piwik安装,以注册页面视图

现在我不明白为什么你不直接在你的页面上包括piwik.js。当您可以将它与其他脚本连接并缩小时,为什么还要从一个单独的位置获取它呢

可以在cdn上托管
piwik.js
(请参见和),因此我想知道为什么不跳过这一步,将其与其他脚本连接起来,然后从那里进行优化



我相信Google analytics也会做同样的事情,所以答案不需要针对Piwik,只要它同时适用于两者。

这是为了防止Piwik.js文件阻止页面的呈现。正如你所说,Google Analytics提供的代码片段的工作原理基本相同。史蒂夫·苏德斯(Steve Souders)对该公司的许多好处有很好的评价

另见:

代码段的后半部分提供了加载 与页面上的其他脚本并行跟踪代码。它执行 一个匿名函数,动态创建元素和 使用正确的协议设置源因此,大多数浏览器 将与上的其他脚本并行加载跟踪代码 页面,从而减少网页加载时间。


是的,我看到它设置了一个
async
属性。但是为什么不直接包含一个带有
async
属性的脚本呢(或者更好的做法是,最后包含代码,然后与其余代码连接并缩小)?我看不出有任何理由从一个单独的位置加载它只是为了这么做。到目前为止,我所能说的支持这种方法的是,当Piwik升级(或谷歌跟踪代码升级)时,脚本将自动获取更新的版本,不依赖管理员来更新跟踪代码。正如Google博客文章中所述,动态地将脚本插入页面与
async
属性具有相同的效果。我认为这是一个解决办法,可以解决像InternetExplorer Ok这样的旧浏览器中缺乏对
异步
的支持,因此在
之前,将piwik.js作为最后一个脚本(并缩小和连接它):1。防止并行加载2。防止自动版本控制3。可能会延迟数据的记录。除此之外,没有任何不利因素?因为对我来说,为piwik.js服务的服务器是瓶颈,所以我认为在将piwik.js与我的其他脚本连接时,速度会有所提高,并且版本控制和延迟录制也会很好。如果可以的话(请注意,代码段在加载piwik.js之前设置了一些必需的变量),性能方面的好处(如果有的话)可能微不足道。“为piwik.js服务的服务器”如何成为瓶颈?
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="//piwik.example.com";
    _paq.push(['setTrackerUrl', u+'piwik.php']);
    _paq.push(['setSiteId', 1]);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
  })();
</script>