84

谷歌分析在多大程度上影响性能?

我正在寻找以下内容:

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

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

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

我很想看看这如何减少客户端网络服务器和 GA 服务器之间的通信。

有人做过这些测试吗?如果是这样,你能提供你的结果吗?如果没有,有没有人有更好的方法来测试使用 GA 的性能影响(或缺乏)?

4

16 回答 16

35

2018 年更新:您安装 Analytics 的位置和方式一次又一次地发生变化。当前的 gtag.js 代码做了一些事情:

  1. 加载 gtag 脚本但异步(非阻塞)。这意味着它不会以任何其他方式减慢您的页面速度,而不是带宽和处理。
  2. 在页面上创建一个名为window.datalayer
  3. 定义一个小gtag()函数,将你扔给它的任何东西推入该数组。
  4. 使用页面加载事件调用它。

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

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

但与(例如)现代前端框架相比,这一切都可以忽略不计。

如果您要寻找绝对的、最精简的网站,请完全避免使用它。如果您想保护用户的隐私,请不要使用任何第三方脚本......但是如果我们谈论的是一个普通的现代网站,那么如果您是打击性能问题。

于 2009-01-12T12:38:25.563 回答
11

Steve Souders(客户端性能专家)有一些很棒的幻灯片,内容是:

  • 并行加载外部 JavaScript 文件的不同技术
  • 它们对加载时间和页面渲染的影响
  • 浏览器显示什么样的“进行中”指示器(例如状态栏中的“加载”、沙漏鼠标光标)。
于 2009-01-12T12:34:56.427 回答
7

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

下载了两个东西:

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

  2. 带有动态 url 的 35 字节 gif 文件(通过查询字符串 args),因此每次都会请求。35 字节的下载量也可以忽略不计(萤火虫说我花了 70 毫秒来下载它)。

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

于 2009-01-12T12:43:57.033 回答
5

根据我自己的经验,添加 Google-Analytics 并没有改变加载时间。

根据 FireBug 的说法,它在不到一秒的时间内加载(平均 648 毫秒),因此根据我的一些其他测试 ~60% - 80% 的时间是从服务器传输数据,这当然会因用户而异。

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

我在 40 多个网站上使用 Google-Analytics 并没有导致任何甚至很小的速度变慢,大部分时间都花在获取图像上,由于它们的典型尺寸,这些图像是可以理解的。

于 2009-01-12T12:21:59.793 回答
5

您可以毫无问题地将 ga.js 托管在您的服务器上,但想法是您的用户将从他们可能访问过的其他站点缓存 ga.js。所以下载 ga.js,因为它非常流行,在很多情况下增加的开销很小(即,它已经被缓存了)。

此外,由于网络拓扑,DNS 查找在不同地方的成本并不相同。缓存行为会根据用户是否使用包含 ga.js 的其他网站而改变。

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

希望这可以帮助。

于 2009-01-12T12:22:40.523 回答
3

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

这是一个示例页面加载: 在此处输入图像描述

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

您可以看到blogger.com在 300毫秒内提供了 34Kb。快了 32 倍!

另外,看看红线(代表 onLoad 事件,意思是页面上没有更多脚本执行,因此浏览器最终可以停止加载指示器/旋转/等)...看看它向右多远是。这可能是那里发生的 3 秒垃圾 javascript 处理。这条线离资源下载栏的末端很远是非常罕见的。我已经完成了调试,这是 1/3 分析错误,2/3 博主错误。...有人会认为谷歌的东西很快。

编辑:

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

我从上面删除了 googleplus 废话有两个原因,我试图看看他们是否在缓慢的 onLoad 事件中发挥了一些作用(他们不是),因为它大多是无用的。

在此处输入图像描述

所以,有了这个,我们可以看到网络时间是你最不担心的。即使在装有现代软件的快速计算机上,收费谷歌分析 + 博主在处理时间上仍会将您的页面加载转储到 7 秒后。没有博主,只需检查这个网站,我看到资源加载后有 0.5 秒的延迟并且红线开始了。

于 2013-06-03T00:27:09.363 回答
3

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

Google Analytics 的 HTML 是您放置在网页底部的三行 javascript。这真的没什么,并且不会比版权声明消耗更多的服务器资源。

在客户端,页面可能需要一点时间(最多几秒钟)来完成显示页面。然而 - 根据我的经验,唯一没有加载的页面是谷歌的东西,所以用户可以很好地看到你的页面。你只是让页面顶部的悸动者颤动更长时间。

(注意:您需要将您的谷歌分析代码块放置在任何服务页面的底部,以防出现这种情况。我不知道如果将代码块放在您的 HTML 顶部会发生什么)

于 2009-01-12T12:22:15.360 回答
3

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

但是,Google 将缓存设置max-age86,400 秒(即 1 天,甚至设置为public,因此也适用于代理)。因此,由于许多站点加载相同的 Google 脚本,因此 JavaScript 通常会从缓存中获取。尽管如此,即使ga.js已缓存,只需单击重新加载按钮通常会使浏览器询问 Google 是否有任何更改。然后,就像ga.js还没有缓存的时候一样,浏览器必须等待响应才能继续:

获取 /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 日星期日 12:08:27 GMT  
缓存控制:max-age=604800,公共  
服务器:高尔夫  

请注意,许多用户点击重新加载他们已经在浏览器窗口中打开的新闻站点、论坛和博客,导致许多浏览器被阻止,直到收到来自 Google 的响应。您多久重新加载一次 SO 主页?当 Google Analytics 响应缓慢时,这些用户会立即注意到。(网上发布了很多异步加载ga.js脚本的解决方案,对这类网站特别有用,但可能不再比谷歌更新的说明好。)

一旦 JavaScript 加载并执行,web bug(跟踪图像)的实际加载应该是异步的。因此,跟踪图像的加载不应阻止其他任何内容,除非页面使用body.onload(). 在这种情况下,如果 web 错误未能及时加载,那么单击重新加载实际上会使事情变得更糟,因为单击重新加载也会使浏览器再次请求脚本,If-Modified-Since如上所述。重新加载之前,浏览器只等待网络错误,而单击重新加载后,它还需要ga.js脚本的响应。

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

另请参阅 Google 的功能概述,解释Google Analytics 如何收集数据?,包括跟踪代码的工作原理。(这也使得谷歌收集第一方 cookie 的内容成为官方的。即:来自您正在访问的网站的 cookie。)


更新:2009 年 12 月,Google 发布了异步版本。上面应该告诉大家升级只是为了确定,虽然升级并不能解决所有问题

于 2009-07-26T12:37:13.193 回答
2

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

由于Ajax Samples的性能问题,我们将其删除,但对于我们来说,超快速和响应性再次成为优先级 1、2 和 3

于 2009-01-12T13:55:59.323 回答
2

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

于 2009-01-12T12:36:13.570 回答
1

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

然而,来自http://www.ga-experts.com的这段摘录声称这是一个神话,即 GA 会减慢您的网站速度。

呃,好吧,也许有点,但我们谈论的是毫秒。GA 通过页面标记工作,每当您向网页添加更多内容时,它都会增加加载时间。但是,如果您遵循最佳实践(在标签之前添加</body>标签),那么您的页面将首先加载。另外,请记住,任何基于页面标签的网络分析包(大多数)都将以相同的方式工作

从上面的答案和所有其他来源,我的感觉是,由于脚本包含在页面底部,因此用户无法感知它导致的任何减速。但是,如果我们谈论完整的页面加载,我们可能会说它减慢了页面加载时间。

如果有,请在更多信息中发布,如果有,请在 DATA 中发布。

于 2009-01-14T15:04:30.663 回答
1

没有什么明显的。

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

除此之外,浏览器将并行加载 Google 脚本以及所有其他嵌入式资源,因此在最坏的情况下,您下载所有内容所需的时间可能会略微增加(我们按以下顺序进行讨论)毫秒,不明显。如果 Google 脚本是浏览器最后加载的,或者您的页面上没有很多外部资源,或者您的页面的外部资源被浏览器缓存,或者如果 Google 的脚本被浏览器缓存 (极有可能)那么您将看不到任何区别。总体而言,这绝对是微不足道的,粗略地说,与在页面上粘贴额外的小图片的效果相同。

唯一可能产生具体影响的情况是,如果您有一些行为触发 onLoad 事件(等待外部资源加载),并且Google 服务器出现故障/缓慢。后者不太可能经常发生,但如果是这种情况,那么在下载脚本之前 onLoad 甚至不会触发。无论如何,您都可以通过使用各种“当 DOM 加载时”事件来解决这个问题,这些事件通常响应更快,因为您也不必等待自己的脚本/图像以这种方式加载。

如果您真的很担心对页面加载时间的影响,那么请查看Firebug的“网络速度”部分,它将对此进行量化并为您绘制漂亮的图表。无论如何,我鼓励你自己做这件事,因为即使其他人给你你要求的数据和基准,你自己的网站也会完全不同。

于 2009-01-12T12:23:35.123 回答
0

问题是谷歌分析会导致您的网站变慢,答案是肯定的。目前,在撰写此 Google-Analytics.com 时,该网站无法正常工作,因此页面中包含该内容的网站将无法加载页面,因此是的,它可能会减慢并导致您的网站甚至无法加载。google-analytics.com 出现如此长的停机时间并不常见,目前已经超过 10 分钟,但这只是表明它是可能的。

于 2010-06-12T21:10:10.280 回答
0

我认为这不是您要寻找的东西,但是您担心性能是什么?

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

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

于 2009-01-12T13:43:44.587 回答
0

它有两个方面。

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

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

转折来了。

  1. analytics.js 执行 250 毫秒
  2. 再营销(如果启用) 300 毫秒
  3. 人口统计(如果启用) 200 毫秒

因此,再营销分析平均需要 750 毫秒。我觉得在性能开销方面这是一个巨大的数字。

于 2015-08-22T12:48:01.540 回答
-2

我注意到 cPanel 中频繁的 I/O 和 CPU 过载导致:

站点无法访问错误

在我禁用 WP Analytics 插件后,这种情况就停止了。所以我认为它确实有一些影响。

于 2019-08-20T14:04:47.730 回答