所有
我正在开发一个Flash / AS3项目,该项目会产生大量的URLLoader.load()请求。
我应该将它们排队,以便随时只有一个打开的请求吗?或者,允许多个打开请求是一个好习惯吗?
打开请求的数量是否有限制?
(我假设我可以管理UI中的含义)。
我在本地运行最多5个同时请求的测试,它运行得很好。但我需要确保应用程序可以在现场使用,适用于使用旧PC,旧版浏览器,具有多个打开选项卡的浏览器等的用户。
非常感谢任何建议和见解!
答案 0 :(得分:3)
很久以前,当我试图加载大量图像时,我遇到了这个问题。他们都是本地的,所以我只是把它们与装载机排在一起。队列小时调试图像为空的原因:S
我不确定是否在任何地方提到限制,但我发现(如果记忆服务)30左右就给我带来了问题。在那之后,我认为它将重用旧连接:所以如果你有100个load()调用,那么只会加载最后30个。
通常我一次排队大约10,然后在完成后加载其余的。多个连接没有真正的问题 - 尽管它们会开始占用CPU电源等。
如果您想忽略这一点,请查看为此创建的BulkLoader:http://code.google.com/p/bulk-loader/之类的内容
答案 1 :(得分:2)
我不知道是否有任何硬性限制,但5个同步请求听起来很合理。 我知道大多数浏览器都使用6个同时连接,这可能也是Flash的限制。
我会使用类似5个加载器的东西,并将超出该加载事务的所有加载事务排队。
答案 2 :(得分:0)
很久以前这个问题。我是从Google来到这里的,但谢谢你的回答。
事情可能已发生变化。我只是测试在Flex 4.6和AS 3上重用URLLoader.load。
这里有一个棘手且无证件的限制。加载器可以重用,但只有最后一个请求在回调一次发出。
离。
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方式有关,其中请求将在从回调返回后处理,最后一个覆盖前一个请求。这是我的猜测。
希望这有助于追随者来到这里。