首页 > 代码库 > 页游中资源版本更新问题之解决方案
页游中资源版本更新问题之解决方案
因为很多浏览器的缓存非常顽固,比如IE浏览器,所以在页游中经常会出现一个资源无法及时更新的问题。
比如你更新了背包的资源,是一个swf资源,你把它上传到服务器下面。可是因为缓存的原因,页游运行过程中可能还会运行老的背包swf资源,这样就出现了无法及时更新的问题。
业内常见的解决方案是使用版本号:
1,首先你要新建一个资源xm,里面放的是是各个资源(比如背包swf资源)的版本号,比如1.0。
<?xml version="1.0" encoding="UTF-8"?>
<info>
<assets name="背包">
<version>1.0</version>
</assets>
<assets name="res2">
<version>1.0</version>
</assets>
</info>
2 ,在主swf里加载上面这个xml,这样可以获取到最新的资源的版本号。因为你需要保证你加载的该资源xml是最新的(xml的数据是会经常更新的。因为项目上线后,素材资源经常会出现更新,所以版本号也要更新),所以你在加载该xml的时候,需要这么写,private var xmlUrl:String ="assets/version.xml"+"?"+Math.random();红色部分可以保证你加载的xml是最新的,避免缓存问题。
4,资源加载时,注意:url2="assets/pack.swf"+"?v"+version;(version这个值是从上面的xml里获取的)
var request:URLRequest = new URLRequest(url2);
3,当你需要更新资源时候,先修改上面xml里对应资源的版本号(比如v2.0,v3.0),然后修改把最新的资源swf,和该xml一起上传到服务器下,这样就可以解决缓存使你无法及时更新资源的问题了。
ok,讲到这儿了,我做了个示例,可惜csdn现在无法在这儿上传项目附件。下面是主要代码:
package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
public class TestLoader extends Sprite {
private var str:String="?v";
private var url2:String = "assets/1.swf";
private var xmlUrl:String ="assets/version.xml"+"?"+Math.random();
private var xmlUrl2:String ="assets/version.xml";
private var urlLoader:URLLoader;
private var curResVersion:String;//资源版本
private var userVersion:String;
private var userXmlUrl:String;
private var isUseXmlVersion:Boolean=true;//是否使用xml版本控制
public function TestLoader() {
urlLoader=new URLLoader;
if(isUseXmlVersion)
{
userXmlUrl=xmlUrl;
}
else
{
userXmlUrl=xmlUrl2;
}
var xmlUrlRequest:URLRequest=new URLRequest(userXmlUrl);
urlLoader.load(xmlUrlRequest);
urlLoader.addEventListener(Event.COMPLETE,xmlLoader);
}
private function xmlLoader(event:Event):void
{
var myxml:XML=new XML(urlLoader.data);
curResVersion=myxml.child("assets")[0].version;//显示我们的版本值
var loader:Loader = new Loader();
configureListeners(loader.contentLoaderInfo);
url2=url2+str+curResVersion;
var request:URLRequest = new URLRequest(url2);
loader.load(request);
addChild(loader);
var text:TextField=new TextField;
text.width=300;
var txt:String="";
if(userXmlUrl==xmlUrl)
{
txt="使用了xml版本控制";
}
else
{
txt="没有使用xml版本控制";
}
text.text=txt+",资源版本:"+url2;
this.addChild(text);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
}
private function completeHandler(event:Event):void {
trace("completeHandler: " + event);
}
}
}
页游中资源版本更新问题之解决方案