我正在使用以下代码加载我的Google Analytics(外部javascript),其方式是不阻止呈现。
但是,使用YSlow和Safari Web Inspector - 网络流量清楚地表明ga.js脚本仍然阻止了rending。
/*
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文件的任何想法,因为上面的代码似乎没有按照预期执行,直到整个页面被渲染为止我不会阻止渲染?
答案 0 :(得分:2)
/* and run it */
gaSSDSLoad("UA-5555555-1");
在页面完成渲染之前,不要“运行它”。那就是:onload或其他地方。不要在内联脚本块本身中包含上述行,否则您将无法获得任何内容。
答案 1 :(得分:2)
如果您使用jQuery,可以包含 run it 部分(与body 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");
}
虽然不应该......
答案 2 :(得分:0)
您可以向窗口,文档或正文的onload事件添加侦听器,并在此时执行gaSSDSLoad函数。
答案 3 :(得分: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>
Google建议在结束标记之前加入它。 一般来说,如果你想异步加载其他javascripts,我建议你使用一些加载器,如: