解决Discuz6.0广告加载方式造成页面顿挫 两种方法

Discuz!6.0,是采取先完全输出页面,然后再展示广告。对广告部分的处理办法是先用DIV“占位”,待广告内容下载完成后,刷新DIV位置的显示内容。这样,页面打开速度只与论坛本身的服务器和带宽有关,即使统计服务器或者广告联盟的服务器出现问题,也不会拖慢整个论坛页面的打开速度。这种做法是很好的;
但是这种广告加载有致命的缺陷:
1.会影响百度、GG广告的关键词匹配,造成广告点击率下降;
2.快速展示完页面文本后,浏览器有个明显的顿挫在等待展开GG和百度的广告,而这个等待中往往伴随着鼠标的停顿;
3.GG或百度的广告加载完后,每个加载完毕的广告都会导致页面文本内容重新刷新排列一遍,挂几个广告就重新排列几遍,严重影响了会员的浏览体验。

很多会员提到了这个问题,我也遇到了这个问题;
但官方一直没有发布完美的解决方法;
求人不如求己;仔细分析了下代码后,找到了完美的解决方法;
广告同样是采取先完全输出页面,然后再展示广告,不会因为广告加栽慢而影响页面打开速度;
但页面显示完后不会出现顿挫(抖动)的现象;

经过尝试,也找到:“解决会员用IE6浏览有音乐媒体文件的帖子时,Windows媒体播放器和GG代码冲突导致浏览器卡死问题”的完美解决方法;真正原因其实不像官方说的那样是IE6的BUG;解决这个问题只需要修改一个模板文件的代码就可以了;

一直困饶我的两个难题终于找到解决方法了


第一种方法:(此方法以前已经有人发过)

优点:广告显示和以前5.5版一样,广告按正常顺序加载;百度和GG广告的关键字匹配效果比较好;不会出现顿挫;
缺点:如果广告加载速度慢,会造成整个页面打开缓慢,甚至打不开;

具体方法:
通过修改模板文件,可以改回DISCUZ5.5的显示方式。当然,改完之后对DISCUZ6新引入的INSENZ功能是否会有影响,因没有计划使用INSENZ,所以也没有具体测试过影响与否。另外对于效率是否会有影响,也没有完整测试过。
主要修改templates\default\下的adv.htm discuz.htm header.htm forumdisplay.htm viewthread.htm等几个文件
辩论主题、商品主题等等显示页模板修改方法一样的
discuz.htm/forumdisplay.htm/viewthread.htm:查找<div id="ad_text"></div>,简单替换为

CODE:

<!--{if !empty($advlist['text'])}--><div class="ad_text" id="ad_text_none"><table summary="Text Ad" cellpadding="0" cellspacing="1">$advlist[text]</table></div><!--{/if}-->header.htm:查找<div id="ad_headerbanner"></div>,简单替换为

CODE:

<div id="ad_headerbanner_none"><!--{if !empty($advlist['headerbanner'])}-->$advlist[headerbanner]<!--{/if}--></div>viewthread.htm:只修改内容右侧显示的广告(注:考虑到此部分调用外部SCRIPT的广告确实容易延缓页面显示速度,因此本站没有实际应用),查找<div id="ad_thread3_$post[count]"></div>,简单替换为

CODE:

<!--{if !empty($advlist['thread3'][$post['count']])}--><div class="ad_pip" id="ad_thread3_{$post[count]}_none">$advlist[thread3][$post[count]]</div><!--{/if}-->改完后,相应删除模板文件 adv.htm 第27、28、42三行(即上述替换的代码)。不删除也可以
如果底部的通栏BANNER也要改的话,参照上述修改footer.htm相应内容。

第二种方法:

优点:广告同样是采取先完全输出页面,然后再展示广告,不会因为广告加栽慢而影响页面打开速度;
;不会出现顿挫;
缺点:百度和GG广告的关键字匹配效果不太好;

具体方法:
首先将footer.htm 模板中调用所有广告位广告的代码{eval output();}尽量放到前面来些,这样可以让广告代码比页脚代码先加载,还有论坛的统计代码一定尽量放到最后去;

其实造成页面顿挫的主要是页内文字广告

我的论坛的页内广告都是文字广告,防止加载广告里网页有一个拉长的效果。
修改viewthread.htm,forumdisplay.htm,discuz.htm以及辩论主题、商品主题等等显示页模板:
将其中的: <div id="ad_text"></div>
替换成:

CODE:

<div id="ad_text">
<div class="ad_text">
<table summary="Text Ad" cellpadding="0" cellspacing="1"><tr>
<td width="100%">广告载入中</td>
</tr></table></div>
</div>
也就是让广告显示位置先显示“广告载入中”,暂时不显示具体广告内容;待页面加载完后,广告会自动显示到相应的广告位;

其它位置的广告参照上述修改(可以用文本替换工具,替换所有模板里的相关代码)