更新文件避免浏览器缓存的解决方法(源码)

上次说的:更新文件避免浏览器缓存的解决方案(基于svn)(好纠结的名字啊……),方案测试一段时间之后,没什么太大的问题。共享之。

表述得很不清楚,总之这个东东要实现的目的是:当把项目的新版本放到IIS服务器上之后,保证客户端浏览器Flash再加载的是最新文件,而不是傻呼呼的让用户去清缓存—_—。总的思路是:利用svn的每次提交都会为文件记录一个版本号,我们让程序在加载文件时url都增加一个文件的svn版本参数(例如:http://…/test.jpg?v=3393)。

流程下如下图,我们用mFileRevisionManager来管理文件的版本号。

当然,这就得要求项目程序代码在加载资源使用统一得接口:mFileRevisionManager,比如要加载一份xml文件,代码类似这样:

var xmlLoader:URLLoader = new URLLoader();
var req:URLRequest = mFileRevisionManager.getFileUrlRequest("data/test.xml");
xmlLoader.load(req);

mFileRevisionManager的初始化应该放在最开始的地方,这样我们需要给主程序(main.swf)添加一个预载(preload.swf),这个预载会加载资源的版本信息文件(revision.txt),初始化mFileRevisionManager。如下图:

这个解决方案的使用的开发环境是:FDT 4 + SVN + Flash IDE

需要安装Subversion,这样我们在ant脚本中可以直接执行svn命令。

所有的源码打包:
下载

解压缩包会得到msc、tool两个文件夹。msc文件夹下是AS3代码文件。tool文件夹下包括一个ant脚本和一份jsfl脚本。

  1. Flash端AS3代码

    AS3部分核心类是mPreloadermFileRevisionManagermPreloader是整个程序的预载器,负责加载svn版本号信息文件(cur.txt、revision.txt),然后初始化mFileRevisionManager。实际使用时,把mPreloader编译出一个swf,比如preload.swf。如果你没有修改mPreloader.as的话,preload.swf会加载load.swf,当然你也可以修改成main.swf、game.swf、……

  2. ANT脚本:发布.xml

    假设bin是整个Flash项目最终输出(要发布的)文件夹。

    这个ANT脚本的执行流程是:

    • 提交bin文件夹下的所有修改到svn服务器上。
    • 导出bin目录下所有文件的svn信息,以XML文件形式保存(revision.xml)。把当前的版本号写入cur.txt中。
    • Flash执行jsfl脚本,压缩生成的信息文件(revision.xml),保存成revision.txt
    • 提交cur.txt、revision.txt到svn服务器中。
  3. 一点点修改

    把ant脚本中的Flash.exe路径修改成你电脑上的Flash路径。jsfl脚本第一行的revXmlUri修改成要压缩的revision.xml的路径。
    基本上你在发布整个项目时运行下ant脚本就可以了。

《更新文件避免浏览器缓存的解决方法(源码)》有4个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注