如何在as3中加载图片:
一次加载所有内容,例如像(伪as3代码):
for each (var url:String in images){
loader.load(url);
}
或者逐个加载它们(再次,伪代码):
loader.load(images.shift())
onComplete(){
loadNext(images.shift());
}
哪种方式更快,性能更好?
答案 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);
主要取决于您的应用程序如何使用图像,即在任何给定时间点同时使用图像或者可能是其中的一部分。