3

我正在使用以下代码以阻止呈现的方式加载我的 Google Analytics(外部 javascript)。

但是,同时使用 YSlow 和 Safari Web Inspector - 网络流量清楚地表明 ga.js 脚本仍在阻止渲染。

/*
http://lyncd.com/2009/03/better-google-analytics-javascript/
Inserts GA using DOM insertion of <script> tag and "script onload" method to
initialize the pageTracker object. Prevents GA insertion from blocking I/O!

As suggested in Steve Souder's talk. See:
http://google-code-updates.blogspot.com/2009/03/steve-souders-lifes-too-short-write.html
*/

/* acct is GA account number, i.e. "UA-5555555-1" */
function gaSSDSLoad (acct) {
  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."),
      pageTracker,
      s;
  s = document.createElement('script');
  s.src = gaJsHost + 'google-analytics.com/ga.js';
  s.type = 'text/javascript';
  s.onloadDone = false;
  function init () {
    pageTracker = _gat._getTracker(acct);
    pageTracker._trackPageview();
  }
  s.onload = function () {
    s.onloadDone = true;
    init();
  };
  s.onreadystatechange = function() {
    if (('loaded' === s.readyState || 'complete' === s.readyState) && !s.onloadDone) {
      s.onloadDone = true;
      init();
    }
  };
  document.getElementsByTagName('head')[0].appendChild(s);
}

/* and run it */
gaSSDSLoad("UA-5555555-1");

关于如何使用 JavaScript 延迟加载 ga.js 文件的任何想法,因为上面的代码似乎没有按预期执行,直到整个页面都被渲染,这样我就不会阻止渲染?

4

4 回答 4

2
/* and run it */
gaSSDSLoad("UA-5555555-1");

在页面完成渲染之前不要“运行它”。即:onload 或其他地方。不要在您的内联脚本块本身中包含上述行,否则您将一无所获。

于 2009-10-09T22:21:09.563 回答
2

如果您使用 jQuery,您可以在其中包含run it部分(与正文 onLoad() 事件相同):

$(window).load(function() {
    /* and run it */
    gaSSDSLoad("UA-5555555-1");
});

如果这还不够好,请稍后再运行它(例如...):

$(window).load(function() {
    setTimeout("run_it()", 1000);
});

function run_it() {
    /* and run it */
    gaSSDSLoad("UA-5555555-1");
}

不过应该没必要...

于 2009-10-09T23:28:57.443 回答
0

您可以为窗口、文档或正文的 onload 事件添加一个侦听器,并在那时执行您的 gaSSDSLoad 函数。

于 2009-10-09T22:27:25.227 回答
0

您从 Google Analytics 获得的代码已经是非阻塞的。应该是这样的:

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-5555555-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

谷歌建议将它包含在结束标记之前。一般来说,如果你想异步加载其他 javascript,我建议你使用一些加载器,比如:

于 2011-07-05T11:33:02.873 回答