最近有朋友问,为什么我的网站打开时在执行google analytics有较长的停顿时间。要如果解决?这个问题其实很早就有,最好的解决办法是将网站所有页面的传统追踪代码统一替换为最新的异步追踪代码。不过如果你已经进行了很多个性化的追踪代码定制,这会是个不小的工作。因为异步追踪代码和传统追踪代码在很多方面不能通用。如:虚拟页面,事件追踪等等。需要逐个修改。所以,如果你还不想替换为异步追踪代码,但又想解决这个问题,那么可以试试下面的办法。通过优化传统的google analytics追踪代码来减少停顿时间。
7 M4 a. |3 b6 T$ n: X: }0 j: _, ^) i追踪代码的功能简述: Y! E- v+ F+ H+ Y’ S’ X
在优化前,先看下页面内追踪代码的主要功能。传统的google analytics追踪代码分为两部分。第一部分动态确定当前页面的HTTP协议是否加密。然后使用HTTP或HTTPS协议来请求ga.js文件。第二部分包括所属的配置文件ID,执行页面追踪所须的方法。及JavaScript的错误处理。同时,所有的追踪代码定制内容也都会包含在这部分
– v/ b’ H” Q1 h _0 [; \. j’ N 等待http://www.google– analytics.com/…) {1 L% N X: N5 _& A& k 正在从http://www.google– analytics.com/…传送数据 ; R* E- o) u’ y6 F& {& w: a5 Y最近有朋友问,为什么我的网站打开时在执行google analytics有较长的停顿时间。要如果解决?这个问题其实很早就有,最好的解决办法是将网站所有页面的传统追踪代码统一替换为最新的异步追踪代码。不过如果你已经进行了很多个性化的追踪代码定制,这会是个不小的工作。因为异步追踪代码和传统追踪代码在很多方面不能通用。如:虚拟页面,事件追踪等等。需要逐个修改。所以,如果你还不想替换为异步追踪代码,但又想解决这个问题,那么可以试试下面的办法。通过优化传统的google analytics追踪代码来减少停顿时间。 7 M4 a. |3 b6 T$ n: X: }0 j: _, ^) i追踪代码的功能简述: Y! E- v+ F+ H+ Y’ S’ X 在优化前,先看下页面内追踪代码的主要功能。传统的google analytics追踪代码分为两部分。第一部分动态确定当前页面的HTTP协议是否加密。然后使用HTTP或HTTPS协议来请求ga.js文件。第二部分包括所属的配置文件ID,执行页面追踪所须的方法。及JavaScript的错误处理。同时,所有的追踪代码定制内容也都会包含在这部分。 2 i: F( q e$ i) y, M6 [追踪代码的加载流程: 4 {6 S- s5 o/ A# u+ W$ ^; K7 F其次还需要了解追踪代码的工作流程。就是说,在产生停顿的这段时间里,google analytics的追踪代码都在做什么?当打开一个带有google analytics追踪代码的页面时,追踪代码会首先判断所在页面的类型,然后向对应的地址(http://或https://)请求ga.js文件。 ga.js文件在执行的过程中检查cookie的内容并收集其他的信息。最后通过请求一个_utm.gif图片,将所有收集到的信息附在参数中返回 google服务器。 |
粗略的来看,在这段时间中google analytics追踪代码完成了下面4个操作。
f$ O& W% R” Y” S3 x$ w1判断所在页面类型1 {6 R$ E/ B, \( h
2请求ga,js文件
5 O# B3 H# l+ d+ k3执行ga.js文件
* a7 g5 ]3 K7 J/ i; l f4收集并返回数据) [5 Y6 m- N” Y b9 T, n
按照上面的4个步骤,我们找出可以进行优化的部分。尽量减少停顿的时间。
) ], \. b” Y* k# L% L3 R }优化追踪代码的三种方法:) |, [4 T! y; D” g5 O( G- |
1省略页面类型判断
1 l, ~9 g e’ m5 m! Sgoogle analytics追踪代码第一部分的设计是用来自动匹配加密和非加密两种页面类型的。对于没有加密页面的网站,可以省略这里的判断。将第一部分直接写成
& \3 G4 b” `; e& z/ p% V# M% p6 T4 _<script type=”text/javascript” src=”http://www.google-analytics.com/ga.js”></script>
2 ? x Q. A’ T% {8 @9 c k. z: L$ L” X: C当页面被访问时,代码不会判断当前页面的类型。而是直接向http://www.google-analytics.com/ga.js这个地址请求JS文件。如果你的网站既有加密页面也有非加密页面,也可以写成这种模式1 b: a: s: @2 y1 X4 J: D* N& D
<script type=”text/javascript” src=”https://www.google-analytics.com/ga.js”></script>
7 }+ O& s N* E& Q0 Z’ q2 同步ga,js文件加载速度
( n” l/ ?4 ^: l$ d$ j& r+ fGoogle analytics的服务器在美国。ga.js文件大约有25K。当访客第一次访问你网站时,页面追踪代码需要从服务器上下载这个ga.js文件。(在后续的访问中,如果js文件没有更新,GA会直接使用本地缓存中的ga,js文件。)
9 f, t$ `6 a9 V5 E这里可以将ga.js文件保存下来,上传到自己网站的根目录下。然后修改追踪代码中的文件请求地址。例如:假设我将ga.js文件上传到自己博客的根目录下。同时修改追踪代码第一部分的请求地址。
9 t6 z! `” _# T% A8 Y<script type=”text/javascript” src=”http://bluewhale.cc/ga.js”></script>
/ J4 G# ?% n9 {3 i这样,ga.js文件的加载速度就和你的网站同步了。但需要注意的是,google会不定期的更新ga.js文件。所以你也需要定期更新这个 ga,js文件。保持与google最新版本同步。+ U! i; B0 Z! d; I5 C
PS:其实从google服务器上下载这个js文件时速度并不慢,更多的可能是心理因素。) w8 A# F! p” q9 {, G’ g
3省略cookie完整性检查% B4 M’ K$ H- A/ V+ J$ x0 \
在前面关于cookie的文章中曾经介绍过,每个cookie值的第一组数字都是域的哈希值,用来检查cookie的完整性。这个功能在跨根域追踪时是要被禁用的。在这里,你也可以关闭掉这个功能来提高ga,js代码的执行效率。方法是在追代码的第二部分加入 pageTracker._setAllowHash(false);关闭域哈希值后,ga,js每次执行时将不再检查cookie的完整性。