让浏览器自动选择最快的线路

标签:JavaScript

因为本站有双线、电信、网通这3种域名,而双线经常会将非电信用户误判为电信,造成访问较慢,因此便去网上搜了搜,在这篇文章里找到了解决办法:
http://5iweifang.cn/article.asp?id=185

如果你用了cnc前缀的网通镜像加速,也可以用这种办法。
此外还获得一个好处,当自己的网页被别人用框架包含时,会自动转到自己的网页。(如果希望能包含,可以把top.location替换成self.location)

效果演示很简单,如果你是电信用户,访问这个地址:
http://keakon.cn
如果你是网通用户,访问这个地址:
http://dx.keakon.cn
如果你没禁用javascript的话,浏览器应该会自动转到最快的线路去(如果没效果,估计是你访问两条线路的速度差不多)。

具体方法就是将各个域名当成图片载入,速度最快的会最先出错,从而触发onerror事件,并用javascript重定向到对应域名。

但是直接套用可能会让首页被搜索引擎惩罚(没有用301重定向),因此我改进了一下,让它重定向到原页面,这样就没理由惩罚了。

方法如下:

编辑你的网站首页,如index.htm,找到head标签,把下面这段代码尽可能放在前面(越早测速越能加快访问速度):
<script type="text/javascript">
	first = true;
	var autourl=new Array("keakon.cn","www.keakon.cn","dx.keakon.cn");
	function auto(url){
		if(first){
			first = false;
			loc=new String(top.location);
			if(loc.indexOf(url) == -1) {
				top.location = url;
			}
		}
	}
	for(var i=0;i<autourl.length;++i) {
		document.write("<img style='display: none' src=http://"+autourl[i]+" width=0 height=0 onerror=auto('http://"+autourl[i]+"')>")
	}
</script>
再改进下,让你的Discuz!论坛无论访问哪个页面,都能自动判断 。
把下面的代码放在header.htm模板的head标签即可。如果不想改文件,在“后台-优化设置”中加到其他头部信息即可。
但每个页面都判断显得不够完美,稍微影响了正常访问的载入速度。你也可以把header.htm的内容copy到discuz.htm里,再添加下面的代码,这样就只在打开bbs首页时判断了。还可以将内容保存为header2.htm模板,在discuz.htm里调用header2这个模板即可。
<script type="text/javascript">
	first = true;
	var autourl=new Array("keakon.cn","www.keakon.cn","dx.keakon.cn");
	function auto(url){
		if(first){
			first = false;
			loc=new String(top.location);
			if(loc.indexOf(url) == -1) {
				top.location = loc.replace(/http:.*\.cn/,url);
			}
		}
	}
	for(var i=0;i<autourl.length;++i) {
		document.write("<img style='display: none' src=http://"+autourl[i]+" width=0 height=0 onerror=auto('http://"+autourl[i]+"')>")
	}
</script>
注意:
1.autourl改为你自己的域名,域名更多的可以增加,少的可以删去。/http:.*\.cn/填你自己的域名后缀,如com、net、org等。如果你有多种后缀,可以改成/http:.*\//,并修改你的url。不知道如何改的,建议查查正则表达式的语法。
2.如果想少占空间,可以保存成一个js文件,并把for循环写成函数,并接受一个参数。再用参数传入是跳转的url。只是不推荐这样做,速度慢时如果多载入一个文件,会变得更慢。
3.如果你访问电信和网通的速度都差不多,那么很可能会随机到任一线路。由于js代码和html标签的读取不是多线程的,你在autourl中放在前面的域名更有可能被访问,这个顺序你可以适当设置下。
4.由于每次都会多载入些js代码,因此在cookie里保存这些信息是最好的,避免每次访问都再次选择。如果用php操作cookie的话,甚至可以控制是否输出这些js代码,以便减少页面载入时间。
5.如果你的网页是php文件,可以用这种方式避免搜索引擎被重定向:
<?php
if(!preg_match('/(bot|crawl|spider|slurp|yahoo|sohu-search|lycos|robozilla)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
?>
选择线路的javascript代码放这里
<?php
}
?>
如果是diszuc的header.htm,可以这样改:

<!--{if !preg_match('/(bot|crawl|spider|slurp|yahoo|sohu-search|lycos|robozilla)/i', strtolower($_SERVER['HTTP_USER_AGENT']))}-->
选择线路的javascript代码放这里
<!--{/if}-->

6条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?