0

Google Cloud Endpoints 建议使用 GsonFactory 或 JacksonFactory 进行 JSON 解析。

我发现从我的端点解析几个 1000 个 java 对象(每个对象只有几个 long 和字符串字段以及一个 GeoPt)需要很长时间,在 Galaxy Note 2 上大约需要 15 秒。

正如谷歌所建议的,我使用:

myBuilder = new MyDbEndpoint.Builder(
                AndroidHttp.newCompatibleTransport(),
                new GsonFactory(),
                credential);
myEndpoint = myBuilder.build();

...

List<myDb> beings = myEndpoint.myDBEndpoint().someMethod().execute().getItems();

我使用 JacksonFactory() 获得了相同的性能。

我做了一些分析,发现所有时间都花在了 JSON 解析上。

除了“分页”我的数据获取之外,任何人都可以在这里提出任何加快速度的方向吗?

谢谢。

4

1 回答 1

1

你没有看到实现之间的速度差异让我感到有点惊讶——我认为杰克逊应该更快。

撇开这一点不谈,我真的不希望整个做事方式很快。作为一个有 C/C++ 背景的人,Google/GAE/Endpoints 的数据通信方式总是让我觉得非常低效——将二进制数据转换为文本,然后将其嵌入到结构化文本表示中,然后解析所有这些另一端的数据(例如与结构相比)。

现在,如果您只是来回发送几个对象,这并不重要,但您正在谈论解析几个 1000 个对象。

但是您不会因为使用 Java 而被低效的方法所困扰。Java 还支持 NIO(我认为 GAE 支持其中的一些),Google 还创建了协议缓冲区,它在比 JSON/XML 更高效的同时仍保持语言中立的平衡。 https://developers.google.com/protocol-buffers/docs/overview

因此,如果解析“几个 1000 个 java 对象”对于您的应用程序来说是正常的,我建议您考虑为您的对象使用不同的表示形式。

于 2013-09-27T15:41:36.377 回答