我正在使用Flex开发移动应用程序,使用BlazeDS时遇到了一些问题。一些用户从我的服务器请求(相对)相当大量的数据,这些数据在大约 2 秒内返回。数据由一些非常简单的对象(具有名称/电话/电子邮件的客户端)和一些其他属性组成,其中一些是具有更多属性的其他嵌套对象)。最大的请求包含不超过大约 10,000 个这些对象,大小只有几 MB。我遇到的问题是,一旦服务器发送其响应,移动屏幕就会在处理数据时锁定。对于 10,000 个对象,这可能需要几分钟,有时甚至会使设备崩溃,充其量会一直让用户屏幕冻结。对于普通用户来说,至少是2-5秒的冻结屏幕。这不仅是功能有限的设备的问题。这也发生在我的 PC(i5 处理器、8GB RAM)上。据我所知,这种停机时间发生在设备收到响应和我可以访问数据之间的某个地方。在以下 RemoteObject 结果处理程序的第一行上设置断点会在屏幕到达断点之前
锁定屏幕:protected function myResultHandler(event:ResultEvent):void
{
var result:ArrayCollection = event.result as ArrayCollection;
//Do other stuff here
}
我对 BlazeDS 和 AMF 知之甚少,所以我唯一的猜测是冻结发生在设备上创建对象时。有没有办法加快这个过程?我通常应该期望看到这样的性能非常糟糕吗?任何帮助将不胜感激。
经过几个小时的挖掘,我找到了解决问题的方法:在服务器端,我发送的对象具有大量与我在移动应用程序上需要的信息无关的无关属性。此外,这些类上还有getMyHelper()
形式的帮助程序方法,这些方法将尝试在 Flex 端生成属性。这导致在下载过程中抛出大量引用错误,因为 AS 对象中不存在具有这些名称的属性。我创建了我需要发送的对象的精简版"精简版",没有额外的属性或方法。现在,在收到服务器的响应后,海量列表几乎会立即显示。