FLASHCS5中应用RSL共享库~

1 条评论 | 2010年05月23日,星期天 1:13 上午 作者:L4cd.Net




这里有几点需要说明一下...
1.当你只加载swf的库时,直接使用RSLInfo即可..代码如下

 

var rsl:RSLPreloader = new RSLPreloader(this);//这里的this为文档类,不传留空亦可~
var info:RSLInfo = new RSLInfo();
info.addEntry("framework_3.5.0.12683.swf");//这里的第二个参数可设置一个跨域文件路径~下方的加载SWZ的代码同理
rsl.addRSLInfo(info);
rsl.start();

 

2.当你需要加载SWZ的库时..需要使用SWZInfo.并且需要注意的时..SWZInfo的构造函数中..需在提供你请求加载的SWZ的"摘要(digest)"
该digest将验证你下载的SWZ文件是否正确~~
而digest是一个 SHA-256 哈希字符串值..
如果你使用flex的话可以直接使用SHA256.computeDigest(bytes)获取...
另外提醒一下..
这里的bytes并不是framework_3.5.0.12683.swz的bytes~而是framework_3.5.0.12683.swf的bytes~
这里很重要喔~~(ps:试了很久才试出来~汗一个~帮助没写清楚)..
那么详细代码如下:

 

var rsl:RSLPreloader = new RSLPreloader(this);
//3c82b2a2455b252b8595fd0113249aa19d7e8bdd516b2f6ea43244aa6d543d58为framework_3.5.0.12683.swf的SHA-256值~
var info:SWZInfo = new SWZInfo("3c82b2a2455b252b8595fd0113249aa19d7e8bdd516b2f6ea43244aa6d543d58");
info.addEntry("framework_3.5.0.12683.swz");
rsl.addRSLInfo(info);
rsl.start();

 

3.当我们加载SWZ时...fp会优先用摘要(digest)从你的电脑硬盘里查找有没有相应的swz文件..
如果你确保swz文件存在...你甚至可以这么写..

 

var rsl:RSLPreloader = new RSLPreloader(this);
var info:SWZInfo = new SWZInfo("3c82b2a2455b252b8595fd0113249aa19d7e8bdd516b2f6ea43244aa6d543d58");
info.addEntry("");
rsl.addRSLInfo(info);
rsl.start();

 

FP将一样返回加载成功...

下面是上边的flash的完整代码...
直接往CS5里贴即可...

 

 

import fl.rsl.*;
import fl.rsl.RSLPreloader;
import fl.events.*;
import flash.utils.getDefinitionByName;
import flash.text.TextField;
import flash.display.SimpleButton;
import flash.events.MouseEvent;
//code by l4cd.net

var button:SimpleButton;
button.enabled = false;
button.alpha = 0.5;
button.addEventListener(MouseEvent.CLICK,_test);
function _test(e:MouseEvent):void
{
	if(!button.enabled)return;
	var DateFormatter:Class = getDefinitionByName("mx.formatters::DateFormatter") as Class;
	var format:Object = new DateFormatter();
	format.formatString = "YYYY年MM月DD日 HH/NN/SS";
	
	var txt:String = 'Class: mx.formatters::DateFormatter';
	txt += '\nFormatString: YYYY年MM月DD日 HH/NN/SS';
	txt += "\nOutput: "+format.format(new Date());
	txt += "\nby: l4cd.net";
	output.text = txt;
}


var output:TextField;
output.background = true;
output.backgroundColor = 0xeeeeee;


var rsl:RSLPreloader = new RSLPreloader(this);
var info:SWZInfo = new SWZInfo("3c82b2a2455b252b8595fd0113249aa19d7e8bdd516b2f6ea43244aa6d543d58");
//这里的地址改成相应的地址~~
info.addEntry("http://www.l4cd.net/rsl/framework_3.5.0.12683.swz","http://www.l4cd.net/crossdomain.xml");
rsl.addRSLInfo(info);
rsl.addEventListener(RSLEvent.RSL_LOAD_COMPLETE,_rslComplete);
rsl.addEventListener(RSLEvent.RSL_PROGRESS,_rslProgress);
rsl.addEventListener(RSLErrorEvent.RSL_LOAD_FAILED,_rslFailed);
rsl.start();
function _rslProgress(e:RSLEvent):void
{
	var txt:String = "Framework_3.5.0.12683.swz loading...";
	txt += '\n	.rslsLoaded = ' + e.rslsLoaded;
	txt += '\n	.rslsFailed = ' + e.rslsFailed;
	txt += '\n	.rslsTotal = ' + e.rslsTotal;
	txt += '\n	.bytesLoaded = ' + e.bytesLoaded;
	txt += '\n	.bytesTotal = ' + e.bytesTotal;
	output.text = txt;
}
function _rslComplete(e:RSLEvent):void
{
	button.enabled = true;
	button.alpha = 1;
	output.text = "framework_3.5.0.12683.swz loaded!\n点下面的按钮进行测试!";
}
function _rslFailed(e:RSLErrorEvent):void
{
	output.text = "Framework_3.5.0.12683.swz\n"+e;
}

==========================

FLEX RSL 应用注意事项

抢沙发!! | 2008年07月24日,星期四 4:00 上午 作者:L4cd.Net
 

 

============================================

 

1.SWC简述
   SWC实质是将事先做好公共程序封装到一个包内发布,提供给其他开发人员使用,类似于JAVA的类库。
   SWC可以封装以下内容:
      .图片、声音等素材文件
      .程序
      .控件或自定义控件

   SWC有两种使用方式
      1.将源代码编译到SWF文件中,SWF运行时不需要外部程序包。
      2.利用RSL技术,SWF文件在运行时才调用SWC中的程序,因此,必须将外部程序包方在SWF能够找到的地方。供其动态调用。这种技术类似于DLL技术。


2.RSL简述
   RSL是与Flex程序物理分离的独立swc文件。当客户通过浏览器下载Flex程序之后,由FlashPlayer负责解释执行。 FlashPlayer在解析Flex程序结构的时候,发现该Flex程序使用了某个RSL,于是FlashPlayer就马上从服务器端下载该RSL,并存放在浏览器缓存中或FlashPlayer指定的客户机硬盘的某个地方。
   如果存放在浏览器内,则只在浏览器内有效
   如果存放在硬盘中,则永久有效

   目前,永久缓存只能是Flex Framework。浏览器缓存则可以是自定义的Flex公共程序集合指,比如SWC
   framework4的大小约为955K,只要不重装操作系统,只需下载一次。

3.FLEX4使用SWC
   开发工具flash builder4 beta2
(1)新建一个FLEX库项目,在SRC目录下存放图片或程序。完成后,直接在FLEX库项目名上通过“右键”点击"构建项目",生成的SWC文件在bin目录下。
(2)在将生成的SWC复制到开发项目中的libs目录下,则SWC自动被引入到项目中。
   如果想将SWC中的源代码编译到SWF文件中
      点击"项目名"->"FLEX构建路径"->"libs"中的链接类型,设置成"合并到代码"
      这种方式的缺点是:只是从程序结构上进行了优化,并没有减轻SWF文件的大小
   如果利用RSL技术,SWF文件在运行时才调用SWC中的程序
      理论上可以点击"项目名"->"FLEX构建路径"->"libs"中的链接类型,设置成"外部"。然后再将SWC文件复制到WEB目录下,与SWF文件同一目录。
      实际上,这种方式是行不通的,不知道为什么,只能通过以下方式实现。
   在同一个flash buider4 beta2工具下新建两个项目一个是开发项目,一个是FLEX库项目
   点击"开发项目名"->"FLEX构建路径"->"库路径",点击"添加项目",将FLEX库项目添加进来。
   再将"链接类型"改在RSL方式。如下所示:FLASHCS5中应用RSL共享库~

4.SWC和RSL优化小结
   本人首先自定义了一个Panel和一个Link控件,代码就不说了。
   再将代码复制到一个新建的FLEX库项目中,分别做了二个主程序进行调用。
   结果如下
             框架是否使用RSL  SWC是否使用RSL     SWF文件大小
     直接调用          否                               941K
     直接调用          是                               150K
     SWC调用        否                否               941K
     SWC调用        否                是               770K
     SWC调用        是                否               150K
     SWC调用        是                是               144K

   从上面结果可以看出框架是否使用RSL对于SWF的文件大小的影响太大了,第一次要下载955K的framework的代价是完全值得的。

   SWC是否使用RSL总的来看,如果少量复用,意义不大。
   上例代码中共使用了一个自定义panel和二个自定义link控件的大小约3K,反复使用四次,
   不优化的大小是150K,而优化之后的大小是144K,减小了约6K,远远小于一个FLEX空白页的大小(约130K)。

 

=========================

 

相关文章:

  • 2021-10-23
  • 2021-09-17
  • 2022-02-21
  • 2021-09-26
  • 2022-12-23
  • 2021-10-24
  • 2021-10-15
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-01
  • 2021-12-18
相关资源
相似解决方案