3

全部,

我正在处理一个发出大量 URLLoader.load() 请求的 Flash/AS3 项目。

我应该将它们排队以便在任何时候只有一个打开的请求吗?或者,允许多个打开请求是一个好习惯吗?

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

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

我已经在本地运行了最多 5 个同时请求的测试,它工作得很好。但我需要确保该应用程序能够在现场运行,适用于使用旧 PC、旧浏览器、具有多个打开选项卡的浏览器等的用户。

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

4

3 回答 3

3

很久以前,当我尝试加载大量图像时,我遇到了这个问题。它们都是本地的,所以我只是将它们与装载机一起排队。排队时间调试图像为何为空:S

我不确定是否在任何地方都提到了限制,但我发现(如果没有记错的话)大约 30 给我带来了问题。在那之后,我认为它会重用旧连接:所以如果你有 100 个 load() 调用,只有最后 30 个左右会被加载。

通常我一次排队大约 10 个,然后在完成时加载其余的。多个连接没有真正的问题 - 尽管它们会开始占用 CPU 功率等。

如果您只想忽略这一点,请查看 BulkLoader:http ://code.google.com/p/bulk-loader/ 之类的内容,它是为此创建的

于 2011-03-16T16:06:48.143 回答
2

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

我会使用 5 个加载器之类的东西,并将所有超出此范围的加载事务排队。

于 2011-03-16T16:06:45.157 回答
0

这个问题很久以前了。我从谷歌来到这里,但感谢您的回答。

事情可能已经改变了。我只是在 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 方式有关,请求会在回调返回后处理,最后一个覆盖前一个。这都是我的猜测。

希望这对来到这里的追随者有所帮助。

于 2015-03-12T12:55:34.923 回答