Google Analytics(分析)是否有性能开销?


83

Google Analytics(分析)在多大程度上影响性能?

我正在寻找以下内容:

  • 基准(包括响应时间/页面加载时间等)
  • 链接或结果到类似基准

在您的网站上测试Google Analytics(分析)的一种(可能)方法:

  1. 通过您自己的服务器提供ga.js(Google Analytics(分析)JavaScript文件)。
  2. 从Google Daily(测试1)和Weekly(测试2)进行更新。

我很想知道这如何减少客户端Web服务器和GA服务器之间的通信。

有人进行过这些测试吗?如果可以,您能否提供结果?如果不是,是否有人有更好的方法来测试使用GA所带来的性能下降(或没有下降)?


4
人们为什么不赞成就将该问题标记为“收藏夹”?如果问题产生有趣的答案,请投票解决问题!
丹·罗森斯塔克

2
也许他们只是想看看人们在说些什么,但对该主题并不完全感兴趣(即,他们在思考相关的内容)
UnkwnTech

3
对。哪一个值得赞扬。投票不是要让您发笑的问题。这不是YouTube。推荐是针对那些可以丰富我们共同技术知识的问题。
丹·罗森斯塔克

1
我想不同的人有不同的投票标准,否则每个问题都会有IMMENSE票数或被关闭。
UnkwnTech

2
重新编写问题以澄清,改善结构并消除句子片段。
George Stocker

Answers:


35

2018年更新:安装Google Analytics(分析)的位置和方式一再改变。当前的gtag.js代码可以执行以下操作:

  1. 加载gtag脚本,但异步(非阻塞)。这意味着除了带宽和处理能力之外,它不会降低您的页面速度。
  2. 在名为的页面上创建一个数组 window.datalayer
  3. 定义一个小gtag()函数,将您将其投入的任何内容推入该数组。
  4. 使用pageload事件进行调用。

加载主gtag脚本后,它将将该数组与Google同步并监视其更改。这是一个很好的系统,与以前的系统不同(例如,在之前填充代码</body>),这意味着您可以在DOM呈现之前调用事件,而脚本顺序并不重要,只要gtag()先定义即可。

这并不是说这里没有性能开销。我们在加载脚本时仍在使用带宽(该脚本在本地缓存15分钟),而且它们扔给您的脚本不是很多,因此有一些CPU时间来处理它。

但是,与(例如)现代前端框架相比,这几乎可以忽略不计。

如果您要使用绝对,最精简的网站,请完全避免。如果你想保护用户的隐私,不使用任何第三方脚本......但是,如果我们谈论的平均现代的网站上,有很多低悬的果实比gtag.js如果你遇到性能问题。


3
Google可能拥有更好的服务器,但是如果可能的话,它们不会提供压缩文件。22k不是一个很大的文件,它足够大,可以从gzip中受益,尤其是纯文本(在我的服务器上将其缩减为10k)。
罗斯,2009年

6
我不知道它们是否在2年前没有压缩过,但是现在已经到了,在撰写本文时,文件大小已从30.92k减少到12.63k。
Yahel 2011年

2
太错了:GA文件被标记为无缓存。没有人缓存。
tacone 2015年

1
我很高兴找到这样一个简单的答案,但这是从2009年开始的。我不是在说“旧意味着坏”,我只是想知道:最近几年有什么变化吗?
LazarLjubenović18年

1
更新为最新脚本。@tacone您的评论距离我的原始答案已经好几年了。一个简单的事实是,在过去十年中,Google反复改变了所有这些工作方式。当前缓存为900s。
奥利

11

Steve Souders(客户端性能专家)提供了一些很棒的幻灯片,这些幻灯片涉及:

  • 并行加载外部JavaScript文件的不同技术
  • 它们对加载时间和页面呈现的影响
  • 浏览器显示什么样的“进行中”指示器(例如状态栏中的“正在加载”,沙漏鼠标光标)。

感谢您参考Souders的幻灯片,其中包含出色的信息。
Sabuncu 2012年

7

我还没有做过任何花哨的自动化测试或程序化的数字运算,但是我使用了带有Firebug插件的旧版Firefox和一对JS变量来告知执行GA代码前后的时差,这就是我所发现的。

下载了两件事:

  1. ga.js是包含代码的JavaScript文件。这是9kb,因此初始下载可忽略不计,并且文件名不是动态的,因此在第一个请求后将被缓存。

  2. 一个35字节的gif文件,带有动态网址(通过查询字符串args),因此每次都需要这样做。35字节的下载量也可以忽略不计(firebug说我花了70ms来下载它)。

就执行时间而言,我的第一个带有干净浏览器缓存的请求平均每次大约330毫秒,随后的请求在35到130毫秒之间。


当您说花了70毫秒时,您是说将观看者点击链接到他们可以看到的页面之间所花费的时间增加了70毫秒吗?如果真是这样,那么从我阅读的内容来看,70ms非常重要。我读到100ms以下的任何东西都被认为是瞬时的。因此,如果用完了70毫秒,则在剩下明显延迟之前,您只剩下30毫秒就可以执行所有其他操作。我完全不确定我所说的话是否有意义,因为我不太了解该主题,但至少从表面上看似乎合乎逻辑。
user3425506

5

根据我自己的经验,它添加了Google Analytics(分析)并没有改变加载时间。

根据FireBug,它的加载时间不到一秒钟(平均648MS),因此,根据我的其他一些测试,大约60%-80%的时间是从服务器传输数据,当然,这在每个用户之间都会有所不同。

由于上述原因,我不认为本地缓存分析代码会大大改变加载时间。

我在40多个网站上使用Google-Analytics(分析),却没有造成任何(甚至很小的)速度下降的原因,花费了最多的时间来获取图像,由于它们的典型尺寸,这是可以理解的。


5

您可以毫无问题地将ga.js托管在服务器上,但是这样做的目的是让您的用户可以从他们可能访问过的其他站点中缓存ga.js。因此,由于下载ga.js非常流行,因此在许多情况下(例如,它已经被缓存)几乎不会增加任何开销。

另外,由于网络拓扑结构的原因,DNS查找在不同位置的花费不相同。缓存行为将根据用户是否使用其他包含ga.js的网站而变化。

加载javascript后,ga.js确实会与Google服务器通信,但这是一个异步过程。

希望这可以帮助。


3

服务器端没有/最小的站点开销。

Google Analytics(分析)的HTML是放置在网页底部的三行JavaScript。没什么,除了版权声明,它不会消耗更多的服务器资源。

在客户端,该页面可能需要一点时间(最多几秒钟)才能完成页面的显示。但是-根据我的经验,页面唯一未加载的内容是Google内容,因此用户可以很好地看到您的页面。您只需要在页面顶部将节拍器搅动一会儿即可。

(注意:在这种情况下,您需要将Google Analytics(分析)代码块放置在所有投放的页面的底部。我不知道如果将代码块放置在HTML的顶部会发生什么情况。


3

Google关于如何使用的传统说明。因此,即使浏览器会以某种方式异步加载外部JavaScript库,直到实际执行某些代码,它仍然会阻止页面加载。后面的异步指令不直接使用,但也许ga.jsdocument.write()document.write()document.write()insertBefore也阻止页面加载?

但是,Google将缓存的时间设置max-age86,400秒(即1天,甚至设置为public,因此也适用于代理)。因此,由于许多站点加载了完全相同的Google脚本,因此通常会从缓存中获取JavaScript。不过,即使ga.js是缓存,只需点击刷新按钮往往会使浏览器问谷歌有关的任何变化。然后,就像当ga.js尚未缓存,浏览器必须等待响应才能继续:

GET /ga.js HTTP / 1.1  
主持人:www.google-analytics.com  
...  
If-Modified-Since:2009年6月22日星期一20:00:33 GMT  
快取控制:max-age = 0  

HTTP / 1.x 304未修改  
上次修改时间:2009年6月22日星期一20:00:33 GMT  
日期:2009年7月26日,星期日,格林尼治标准时间  
快取控制:max-age = 604800,公开  
服务器:高尔夫  

请注意,许多用户单击重新加载即可在浏览器窗口中打开已经打开的新闻站点,论坛和博客,从而使许多浏览器处于阻塞状态,直到收到Google的响应为止。您多久刷新一次SO主页?当Google Analytics(分析)响应缓慢时,此类用户会立即注意到。(网上发布了许多解决方案来异步加载ga.js脚本,这对于这类网站特别有用,但可能不再比Google的更新说明要好。)

加载并执行JavaScript后,Web错误(跟踪图像)的实际加载应该是异步的。因此,除非页面使用以下命令否则跟踪图像的加载不应阻止其他任何内容body.onload()。在这种情况下,如果Web错误无法立即加载,则单击重新加载实际上会使情况变得更糟,因为If-Modified-Since如上所述,单击重新加载还会使浏览器再次请求脚本。重新加载之前,浏览器仅在等待Web错误,而单击重新加载之后,浏览器也需要ga.js脚本的响应。

因此,使用Google Analytics(分析)的网站不应使用body.onload()。相反,应该使用类似jQuery的$(document).ready()或MooTools的domready event之类的东西

另请参阅Google的功能概述,说明Google Analytics(分析)如何收集数据?,包括跟踪代码的工作原理。(这也正式表明Google会收集第一方Cookie的内容。即:您所访问的网站中的Cookie。)


更新:2009年12月,Google发布了异步版本。以上内容应该告诉每个人一定要升级,尽管升级并不能解决所有问题


3

这真的取决于一天。我只是将其添加到博客中。我在加利福尼亚,离他们的主要数据中心非常近,使用快速低延迟的商业DSL,使用超频的i5,带有大量运行最新linux内核和稳定的Firefox的RAM。

这是页面加载示例: 在此处输入图片说明

仅google-analytics一项就增加了5的网络下载时间...以获得15Kb!

你可以看到blogger.com在300管辖34KB秒。快32倍!

另外,查看红线(代表onLoad事件,这意味着页面上没有更多的脚本正在执行,因此浏览器最终可以停止加载指示器/旋转/等)的方式……看向右多远是。那大概是3秒在那里发生的垃圾JavaScript处理。该行与资源下载栏的末尾相距很远很罕见。我已经调试完毕,这是1/3分析错误,2/3博客错误。...一个人会认为Google的东西很快。

编辑:

一些更多的数据。这是一个已缓存所有内容的请求。以上是第一次访问。

我已从上面删除了googleplus废话,原因有两个,我试图查看它们是否在慢速onLoad事件中发挥了作用(不是),并且它基本上没有用。

在此处输入图片说明

因此,借助此功能,您可以省去最少的网络时间。即使是在装有现代软件的快速计算机上,收费的Google Analytics(分析)+ Blogger占用的处理时间仍会使您的网页加载时间超过7秒。如果没有博客作者,只需检查此站点即可,加载资源后,红线开始出现0.5s的延迟。


2

从客户端的角度来看,将任何其他javascript加载到您的页面都将增加下载时间。您可以通过将其加载到页面底部来改善此状况,以便即使未加载GA也可以呈现您的页面。我会避免缓存,因为您将失去页面客户端缓存的优势。如果客户端从其他页面缓存了该页面,则页面的请求将由客户端本身填充。如果将其更改为从站点加载,则即使客户端已经有代码(可能),也需要下载。向您的软件过程中添加任务以避免从Google加载文件似乎是不必要的,因为这可能是不必要的优化。很难测试这一点,因为它始终可以在本地更快地服务,但真正重要的是它对您的客户有多快。


2

使用FireBug和YSlow检查自己。但是,您会发现,GA的大小约为9KB(实际上,它的工作量相当大),而且有时加载速度也不会很快(出于某种原因,我不知道,我认为这可能是因为服务器有时“窒息”)

由于Ajax Samples上的性能问题,我们删除了,但是对于我们而言,再次以超快速度和响应速度为首要任务1、2和3


托马斯(Thomas),关于删除GA代码后您得到了哪些改进,您有什么数字吗?就响应时间而言,以百分比或数值本身表示?
MN

我喜欢每个人都这么聪明(包括我在内),但是这种情况的经验是不同的(不是总是吗?)。谢谢您的回答,令人着迷。
丹·罗森斯塔克

1

没什么大不了的。

对Google的调用(包括DNS查找,如果尚未缓存则加载Java脚本以及实际的跟踪程序本身会调用)应由客户端的浏览器在单独的线程中完成,以实际加载您的页面。当然,DNS查找将由底层系统完成,并且据我所知,不会算作浏览器中的查找(浏览器对每个站点使用的请求线程数有限制)。

除此之外,浏览器还将与所有其他嵌入式资源一起并行加载Google脚本,因此,在最坏的情况下,下载所有内容的时间可能会略有增加(在最坏的情况下)毫秒,这不是很明显。如果Google脚本是最后一次由浏览器加载的,或者页面上没有太多外部资源,或者页面的外部资源是由浏览器缓存的,或者Google的脚本是由浏览器缓存的(总的来说,这绝对是微不足道的,就像在页面上粘贴一张很小的图片一样(大致来说)。

大约只有一次,它可能会产生实际的不同,即您是否会在onLoad事件上触发某些行为(该事件等待外部资源加载),并且Google服务器处于关闭/慢速状态。后者不太可能经常发生,但是如果是这种情况,那么在下载脚本之前,onLoad甚至不会触发。无论如何,您都可以通过使用各种“当DOM加载时”事件来解决此问题,这些事件通常响应速度更快,因为您也不必等待自己的脚本/图像也以这种方式加载。

如果您真的担心页面加载时间的影响,请查看Firebug的“网络速度”部分,它将对此进行量化并绘制漂亮的图形。我仍然鼓励您自己完成此操作,即使其他人提供了您所要求的数据和基准,对于您自己的网站也完全不同。


1
您确定“浏览器将同时加载Google脚本和所有其他嵌入式资源”吗?试过了吗?
Arne Evertsson

1
页面呈现在<script>标记检测时暂停,并行执行任何操作,例如,尝试执行以下操作:<script> while(true){} </ script> <p> <img src =“ / picture.jpg” / > </ p>,看看图片是否在清除缓存后显示
Jake McGraw

1

好吧,我已经在网上进行了广泛的搜索,研究和扩展。但是我没有发现任何支持或反对这一前提的统计数据。

但是,摘录自 http://www.ga-experts.com,声称Google Analytics(分析)会使您的网站变慢是一个神话。

错误,很好,也许略有增加,但是我们所谈论的是毫秒。Google Analytics(分析)通过页面标记进行工作,每当您向网页中添加更多内容时,它都会增加加载时间。但是,如果您遵循最佳做法(在标记之前添加</body>标记),则页面将首先加载。另外,请记住,任何基于页面标签的Web分析软件包(大多数)都将以相同的方式工作

从上面的答案以及所有其他来源来看,我觉得页面底部包含了该脚本所导致的任何速度下降,但用户并未意识到。但是,如果谈到完整的页面加载,我们可能会说这会减慢页面加载时间。

如果您有更多信息,请发布更多信息;如果有,请发布更多数据。


1
奇怪的是,上述文章通常仅在Google Analytics(分析)服务器运行良好的情况下进行测试。当这些服务器负载沉重时,事情可能会更加麻烦。而且,如果服务器出现问题,许多不耐烦的用户重新加载可能会使情况变得更糟。
Arjan

0

我认为这不是您要寻找的,但您担心性能如何?

如果它是您的服务器...,那么它驻留在Google服务器上显然没有任何影响。

如果您的用户担心,那也没有影响。只要将其放置在body标签上方,用户就不会收到比以前慢的任何东西...该脚本最后加载,对用户的外观没有影响。因此,基本上没有等待什么,甚至继续浏览页面而没有注意到页面仍在加载。


0

问题是Google Analytics(分析)会导致您的网站变慢吗,答案是肯定的。目前,在撰写本文时,Google-Analytics.com尚无法正常运行,因此页面中包含该页面的网站将无法加载页面,是的,它可能会减慢速度,甚至导致您的网站无法加载。google-analytics.com倒下这么长时间(现在已经超过10分钟)的情况并不常见,但这只是表明有可能。


0

它有两个方面。

  1. Analytics脚本的(和gif)下载
  2. 下载的脚本执行

下载时间几乎总是小于100ms,这是可以接受的。

这是转折。

  1. analytics.js执行250毫秒
  2. 再营销(如果启用)300ms
  3. 受众特征(如果启用)200ms

因此,通过再营销进行分析的平均时间为750毫秒。我觉得在性能开销方面这是一个巨大的数字。


-2

我注意到cPanel中频繁出现I / o和CPU超载,导致:

网站无法访问错误

在我禁用WP Analytics插件后,该操作停止了。因此,我认为这确实会产生一些影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.