在AS3中加载图像的方法

时间:2009-10-31 00:57:23

标签: flex flash actionscript-3

如何在as3中加载图片:

  1. 一次加载所有内容,例如像(伪as3代码):

    for each (var url:String in images){
        loader.load(url);
    }
    
  2. 或者逐个加载它们(再次,伪代码):

    loader.load(images.shift())
    
    onComplete(){
        loadNext(images.shift());
    }
    
  3. 哪种方式更快,性能更好?

2 个答案:

答案 0 :(得分:3)

这个问题没有一个简单的答案。

当Flash加载文件(在浏览器中)时,它依赖于浏览器来管理http事务,缓存等。如果你只有少量图片并且它们不是太大,第一种方法更容易编程,您可以依赖浏览器http加载队列来管理文件。

如果你有很多文件(数十和数十),以某种方式错开它可能会在很多方面更好。首先,每个对象创建都非常昂贵,在加载器的情况下,您最终会将事件侦听器附加到它,甚至可能显示加载动画。这非常昂贵,会降低Flash速度,从而降低应用程序的响应速度。其次,通过错开它们,您可以明确控制何时加载,而不是依赖于浏览器http实现。例如,您可以确保首先加载用户首先要访问的项目。

如果文件大得多(比方说数百千字节),你可以一个接一个地加载,这样就不会使用户带宽匮乏。这允许某种形式的结果比等待四个(通常的并发限制)100千字节文件并行下载更快。

你选择的策略实际上取决于你想要做什么,我认为这个论坛最终太模糊了。

另外需要注意的是,在下载失败的情况下,第二种方法不是很强大。

答案 1 :(得分:3)

第二种方式似乎好多了。如果在第一种方法中要加载数百个图像,则几乎同时触发所有图像请求,使得浏览器几乎无法使用,并且由于并行请求(然后将共享带宽),加载第一个图像可能需要更长时间比第二种方法。但是第一种方式的总加载时间(即图像数量*加载单个图像的平均时间)将会减少。

最好的方法是使用这些方法的混合。随时加载MAX_NUMBER,这意味着开始加载图像,直到MAX_NUMBER图像加载操作正在进行。一旦加载操作完成,就开始加载一个新的加载操作。以下是粗略的方法。 loadimages需要在固定时间间隔后调用100 ms。 MAX_NUMBER可以是20左右。

function loadimages(){
    while(count < MAX_NUMBER) {
        loader.load(images.shift);
        count++;
    }
}
onComplete() {count--;}
onFail(){count--;}
setIntarval(loadimages, 100);

主要取决于您的应用程序如何使用图像,即在任何给定时间点同时使用图像或者可能是其中的一部分。