避免谷歌广告影响页面加载速度
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
也许大家喜欢往自己的站点上放点广告来捞取外快,但是当确实这么做时却发现网页的加载速度变慢了,为什么呢?
因为目前浏览器总是阻塞式(blocking)的读取网页引用的外部JavaScript,所以 雅虎网页优化14条准则 中也提到把外部引用的脚本放在页面的底部,差不多是</body>之前。这样网页基本上能最快渲染完毕,然后再加载这些外部脚本。
好了,了解这么多,大家肯定想这样广告只能显示到页面底部了,我想自定义广告的位置该怎么办?Aaron Peters给出了个办法,大家可以参考他博客上的这篇文章 《Non-blocking Google Adsense ads: improve page speed》 ,也就是说我们可以在要放广告的地方放置一个div层,然后把页面底部的广告脚本代码appendChild加载到这个层即可。
不过我不太明白的是为什么Aaron Peters要把页面底部的广告层设置为display:block,貌似这样加载页面的时候,底部会先出现广告,然后才加载至指定位置的层,起初我是这样想的,首先把底部位置的广告层设置为display:none,然后加载至指定位置时再display:block,
想法很好,但是实际操作的时候,广告死活显示不出来,经过摸索,终于找到了解决方案,也就是说,在底部的广告代码层的display:block,但是外面再套个display:none的层,这样基本就完美了,下面分享下我的做法。
(注:发现原来是自己脚本写错了实际这个方法也是可以的)
function speed_ads() {
var ad = document.getElementById('adsense'),
loader = document.getElementById('adsense-loader');
if (ad && loader) {
ad.appendChild(loader);
loader.style.display='block';
ad.style.display='block';
ad.style.height='60px';
}
}
window.onload=function() {speed_ads();}
<html>
<head>
<!--上述脚本位置-->
</head>
<body>
<!--指定的广告显示位置-->
<div id="adsense"></div>
<!--其他内容位置-->
<p></p>
<p></p>
<!--广告代码位置-->
<div style="display:none">
<div id="adsense-loader" style="display:block">
<script type="text/javascript">
// 谷歌广告代码
</script>
</div>
</div>
</body>
</html>
有网友给Aaron Peters指出了个问题,原文如下。
Important: Will Alexander posted a comment about the failure of this trick: it may (and often will) result in double impressions for ads served to visitors with Gecko (Firefox) and WebKit (Chrome) browsers. Do Not Use This Trick!!!
大概意思是在Gecko核心 (Firefox) 和 WebKit核心 (Chrome)的浏览器下,广告的展示会变为两次?我试了下,暂时没有发现异常,如果有朋友发现问题的话记得告诉我哦:-)
2011年8月26日更新
看到Aaron Peters的这篇文章又有了更新,谷歌广告已经支持非阻塞(Non-blocking)方式加载广告了:
Adsense releases non-blocking Adsense! Yes, it happened, finally: Google has released a new version of the Adsense show_ads.js file that loads in a non-blocking way. Per today, March 18 2011, Google serves it to Chrome, Firefox and IE8 browsers and support for more browsers is coming. As a bonus: publishers do not have to change their code!Read the Google Code blog post about the new Adsense code(注:由于特殊原因,这里的链接我就不放了,大家可以到 作者那篇文章 上去找下。)
我试了一下,确实不再卡住页面了,看来谷歌的技术还是比较强大的!
收集ADsense资料罗~~
@胡萝卜 呵呵,欢迎常来~~~
有百度的么? 我要百度的…
@威言威语 把谷歌广告代码换成百度的就可以了
看起来不错,在老威的博客上看到的,哈哈~~回头我再研究研究。
@Prouz 威哥的那个改动是点睛之笔,被他改过后通用性强了
暂时还没有看懂,慢慢研究下
@晨光博客 呵呵,有什么不懂的地方可以提出来:-)
填写什么? 这个我不懂..
@小司 您是指哪个方面的填写?可以看看小威的办法。另外谷歌已经支持非阻塞广告加载方式了,这个方法也就不推荐了,详细见《谷歌广告(Adsense)已经采用非阻塞方式(non-blocking)加载》。
[...] 在网有个同行有这样两篇文章,避免谷歌广告影响页面加载速度。谷歌广告(Adsense)已经采用非阻塞方式(non-blocking)加载,提到什么阻塞加载和非阻塞加载的问题,不研究过,不过貌似google广告在页面中加载应该不会影响到我们的页面加载了。 [...]
真正的技术博客啊。 虽然老衲不懂技术,但是向来钦佩技术人员。 不错,学习了。
呵呵,相互学习,共同进步。
正为加载速度慢发愁呢,试试,谢谢博主
请教博主代码高亮用的是什么插件?谢谢.
我使用的是WP-Syntax这款插件,当然也有不少类似效果的,基本上都是调用了GeSHi这个开源库实现的,所以你也可以在WordPress中使用GeSHi作为关键词进行搜索。
谢谢。
[...] 那么如何将广告对网页加载的影响降到最小是我们所要考虑的,王晔童鞋的这篇文章《避免谷歌广告影响页面加载速度》就很好的解决了这个问题,此人隐藏甚深,平时一般不抛头露面,好东西都藏着,大家一般很难注意到,所以我还是要推荐一下下。 [...]
本来我加载只需要1秒以内的,加了谷歌广告的js后,要2秒左右,晕~