2011-03-16 57 views
3

全部,Flash/AS3 - 同步URLLoader.load()请求的数量是否有限制?

我正在制作大量URLLoader.load()请求的Flash/AS3项目。

我应该排队他们,以便在任何时候只有一个打开的请求吗?或者,允许多个开放请求是一种好的做法吗?

打开的请求数量是否有限制?

(我假设我可以管理UI中的含义)。

我已经用最多5个并发请求在本地运行测试,它工作得很好。但我需要确保应用程序可以在现场工作,对于使用旧PC的用户,旧版浏览器,具有多个打开标签的浏览器等。

非常感谢您的任何建议和见解!

+1

我发现一次使用多个速度可以加快速度,但是如果我的UI在加载时做任何事情,那么更活跃的加载器会让我的UI变得更慢。我假设它只是IO使用限制FPS ... – jpea 2011-03-16 15:18:33

回答

3

我很久以前遇到过这个问题,当时我试图加载大量的图像。他们都是本地人,所以我只是用Loader排队。队列小时调试为什么图像为空:S

我不确定是否限制被提及任何地方,但我发现(如果内存服务)在30左右给我的问题。之后,我认为它会重用旧的连接:所以如果你有100个load()调用,那么只有最后30个会被加载。

正常情况下,我一次排队10个左右,然后在完成时加载其余部分。有多个连接没有真正的问题 - 尽管他们将开始占用CPU功率等

如果你想忽略这一点,看看像BulkLoader:http://code.google.com/p/bulk-loader/这是该

+1

另一件需要注意的是Loaders和URLLoaders超出范围。一定要保持对它们的引用,直到它们的完整或错误事件之一发生,特别是如果你为监听器使用弱引用。我注意到,如果他们在调用load之后超出范围,有时候负载将在垃圾收集器到达之前进入一个完整的事件,让您认为一切正常,但大多数情况下在调用之后没有任何事情发生加载 - 当加载程序超出范围时,既不发送错误也不分派事件。 – Triynko 2012-09-06 21:37:41

2

我不知道这是否有任何硬性限制,但5个同步请求听起来很合理。 我知道大多数浏览器都使用6个同时连接,也可能是Flash的限制。

我会使用类似5加载程序的东西,并排队所有超出该负载的事务。

1

这个问题是创建很久以前。我来自谷歌,但感谢你的答案。

事情可能已经改变。我只是测试在Flex 4.6和AS 3上重用URLLoader.load。

这里有一个棘手的和无证的限制。加载器可以被重用,但只有最后一次请求在回调中发出。

ex。

timer:Timer = new Timer(5000); 
timer.addEventListener(TimerEvent.TIMER, timerHandle); 
timer.start(); 
var loader:URLLoader = new URLLoader(); // and need to add listeners for response 

function timerHandle(e:TimerEvent):void { 
    loader.load(certainURLRequest); 
} 

这个效果很好。但下面的方式并不是。

function timerHandle(e:TimerEvent):void { 
    loader.load(firstURLRequest); // this request didn't get issued 
    loader.load(secondURLRequest); // this request got sent 
} 

我不知道内部。这可能与ActionScript的单线程EventLoop方式有关,其中请求将在从回调返回后处理,最后一个覆盖前一个。这是我所有的猜测。

希望这有助于追随者来到这里。