Anyway,we should move on…
自动选择最快的镜像站代码,通过flash script3来实现,效果非常棒
实现原理:
通过flash 加载2个镜像网站的相同大小的一个swf文件,加载结束以后,统计2个文件的加载时间,时间越短,当然加载速度越快了,然后比较大小,自懂跳转到对应的网址.一下是loading.swf源码
以下为引用的内容:
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.*;
import flash.events.*;
import flash.external.ExternalInterface;//调用js的包
loader.swf源文件代码(loader.swf,和loader2.swf是一样的,只是名称不一样,防止从缓存加载),这个文件我设置5k大小。这个大小根据几个网站的速度来设置。控制判断时间在2秒内。
Security.allowDomain("www.zh002.cn ");//这个事跨域权限设置的,大家可以找下着方面的资料
Security.allowDomain(www.zh005.cn);
crossdomain.xml跨域文件设置
//允许所有域
小结:
import flash.events.ProgressEvent;
var loader1_var:uint=0;
var loader2_var:uint=0;
var t1:uint=0;
var t2:uint=0;
var _global_date1:Date=new Date();
var _global_date2:Date=new Date();
var time1:uint=0;
var time2:uint=0;
var success1:Boolean=false;
var success2:Boolean=false;
addEventListener(Event.ENTER_FRAME,geturl);
function randRange(min:uint, max:uint):Number {
var randomNum:uint = Math.floor(Math.random() * (max - min + 1)) + _global_date1.getMilliseconds()+_global_date1.getDate();
return randomNum;
}
var dd:uint=randRange(1,10000);//设置随机数,防止ie加载缓存的swf
var url1:URLRequest=new URLRequest(”http://www.zh002.cn/loader.swf?ddd=”+dd);
var url2:URLRequest=new URLRequest(”http://www.zh005.cn/loader2.swf?ddd=”+dd+1);
var url3:URLRequest=new URLRequest(http://www.zh002.cn/index.html);
var url4:URLRequest=new URLRequest(http://www.zh005.cn/index.html);
var loader1:Loader=new Loader();
loader1.load(url1);
loader1.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete1);
loader1.contentLoaderInfo.addEventListener(Event.OPEN, openHandler1);
var loader2:Loader=new Loader();
loader2.load(url2);
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete2);
loader2.contentLoaderInfo.addEventListener(Event.OPEN, openHandler2);
var text1:TextField=new TextField();
text1.width=300;
text1.text=”Redirecting. please wait…”;
addChild(text1);
function openHandler1(evt:Event):void{
_global_date1=new Date();//打开远程文件的时候开始计数
}
function openHandler2(evt:Event):void{
_global_date2=new Date();//打开远程文件的时候开始计数
}
function onComplete1(evt:Event):void{
var date2:Date=new Date();
time1=1000+date2.getSeconds()*1000+date2.getMilliseconds()-_global_date1.getSeconds()*1000+_global_date1.getMilliseconds();
success1=true;//结束的时候共用了多少时间,并设置变量标注加载完成
}
function onComplete2(evt:Event):void{
var date3:Date=new Date();
time2=date3.getSeconds()*1000+date3.getMilliseconds()-_global_date2.getSeconds()*1000+_global_date2.getMilliseconds();
success2=true;//结束的时候共用了多少时间,并设置变量标注加载完成
}
function geturl(evt:Event):void{
if(success1==true&&success2==true){
removeEventListener(Event.ENTER_FRAME,geturl);
text1.text=”all success:”+time1+”;”+time2;
if(time1 navigateToURL(url3,”_self”);
}
else
{
navigateToURL(url4,”_self”);
}
}
}
原来很简单,通过加载2个镜像网站的一个小文件来判断加载速度,这个在过内外的企业网站的非常有用,这个代码就是因为客户需要而想出来的。客户有个网站,服务器是中国大陆的,但他人在德国,也有很多国外的客户。国外访问国内的速度非常慢,企业网站有个很大的flash片头文件,如果没有用镜像网站的,德国打开中国网站需要近1分钟的时间,如果用了镜像技术,只要2秒钟来判断,打开网站总的不超过5秒。之前也有用了很多网站的js代码,但效果不理想,可能跟国内外的dns解析时间有关系。所以一直不准确。后来用了这个ac3的代码判断,客户非常满意
如果是多个网站,可以把加载的时间压入数组,然后通过数组大小比较,可以很快找到速度快的镜像网站
Hei,guys! I am Steven Shan! The blog's owner!
Yes, as you seen,my nick name is Syshy,this is my blog,so I named it Syshy's Blog!
Consectetuer adipiscing elit. Quisque sed felis. Aliquam sit amet felis. Mauris semper, velit semper laoreet dictum, quam diam dictum urna, nec placerat elit nisl in quam. Etiam augue pede, molestie eget, rhoncus at, convallis ut, eros. Aliquam pharetra. Nulla in tellus eget odio sagittis blandit. Maecenas at nisl. Nullam lorem mi, eleifend a, fringilla vel, semper at, ligula.
Leave a reply