转载:大型应用程序分割

载入和组织资源分布:Loader

  对于一个大型应用程序,资源和代码不可能全部包含在一个swf文件中。资源可以分布到不同的位置,就像组建网站一样。网站是依靠网页组建成整个网站的框架,每个网页通过标签载入外部文件,在页面中标签可以载入外部内容,也可以通过标签把部分内容写在网页中,例如js代码和xml文件。as3应用程序的组织与网站类似,但组织资源结构的不是标签,而是Loader加载器。

  组织整个as3应用程序的类主要有Loader类、LoaderInfo类、LoaderContex类、ApplicationDomain和SecurityDomain类,其中最核心的类是Loader类。


Loader类的特点

  Loader只能载入外部图片和swf,在格式上有局限性,但Loader提供从内存中加载图片和swf的方法,可以配合URLLoader进行扩展,从而对外部资源进行加密或分割。Loader侧重点不在于加载的数据类型,而在于组织应用程序资源分布。当加载图片时,Loader是一个纯粹的资源加载器;但当加载包括代码的swf时,Loader变成了应用程之间的连接器,是swf文件之间的纽带,由于swf中又可以使用Loader载入swf,Loader成为树状资源分布结构中的节点。Loader承载如此重要功能,为此as3对Loader进行了精心的设计:

1.轻量级

Loader直接继承于DisplayObjectContainer,增加的成员只有7个,保证在复杂的应用程序中不会因为大量的Loader导致体积迅速膨胀。

2.功能单一

由于设计目的明确,虽然是容器,但只能放入一个显示子对象,再次表明只用于加载,不做普通容器使用,尝试增删子对象的代码会引发错误。

3.运行稳定。

即使加载复杂的swf也能保证正常运行。每个swf的root属性引用自身的文档类对象,避免载入后导致路径错误。

4.加载机制成熟。

Loader使用LoaderInfo作为加载信息对象,加载信息被加载器和加载内容共享,可控制性强。Loader使用安全域和应用程序域对加载代码进行管理,满足不同的需求。

加载过程

  一个正常的资源加载过程如下: p1.jpg

  资源加载过程与数据加载过程很相似,但最大的区别是在信息对象的事件中处理数据而不是在加载器事件中处理数据,这是初学者最容易犯错地方。所有的加载事件都定义在LoadrInfo对象中,Loader本身没有定义加载事件,这是需求所致,因为LoaderInfo对象被加载器和被加载的内容共享,两方面都要了解加载状态和加载信息。对于加载器,LoaderInfo对象是Loader的contentLoaderInfo属性,对于被加载的swf而言,LoaderInfo是文档类的loaderInfo属性,如下图:

 

p2.jpg

 

posted @ 2010-08-30 01:55  rock506  阅读(324)  评论(0编辑  收藏  举报