【问题标题】:GWT Client-side JSON parsing is SLOW - how to improve?GWT 客户端 JSON 解析很慢 - 如何改进?
【发布时间】:2011-06-14 06:16:22
【问题描述】:

我正在尝试寻找使用 Google Web Toolkit (GWT) 从服务器 -> 客户端传输数据的最佳方式。我想发送一些 JSON 文本,但我使用的 2 个选项都非常慢。

选项 1:服务器生成 JSON 字符串,将其解析为 Java 对象(我创建的可序列化类),通过 RPC 发送这些对象的列表,然后由客户端使用对象。这里的块是 RPC 连接,它在传输和序列化对象时速度非常慢。

选项 2:服务器生成 JSON 字符串,不做任何解析工作,将 RPC 作为字符串发送给客户端,然后客户端解析成 Java 对象并进行处理。这里的块是客户端 GWT JSON 解析库,它像糖蜜一样慢(13 个对象约 7 秒)。

我尝试过的唯一“快速”选项是由序列化类的每个实例创建的一个连接的字段字符串,然后在客户端将其拆分和切碎。但是,如果在传输的内容中曾经使用过拆分字符,这会很草率并且容易中断。

也许我在做一些完全错误的事情。但是任何如何改进 GWT JSON 解析时间RPC 传输时间的知识都将不胜感激!

干杯,

保罗

【问题讨论】:

    标签: json serialization gwt


    【解决方案1】:

    我会推荐使用封装在 JSNI 方法中的浏览器 JSON 解析器。请注意,旧版浏览器不支持它,因此您可以使用 https://github.com/douglascrockford/JSON-js 来弥补这一差距。

    请注意,提供的 com.google.gwt.json.client JSON 方法并不是西方最快的,因为它们使用包装器对象。我已经编写了自己的 JSON 库(不久将作为开源发布),但同时您可以编写 JSNI 方法来以本机速度遍历 JSON 对象。

    【讨论】:

    • 感谢您的回复。 JsonUtils.unsafeEval 是否使用本机浏览器解析器?如果没有,您是否知道所需的方法?
    • 它使用 a 原生方法,即 eval()。然而,这并不像 JSON 解析器那样安全,而且通常也没有那么快。请参阅json.org/js.html 进行更多讨论,以及stackoverflow.com/questions/945015/…
    • JSON.parse() 是一种安全的方法,可以防止任何恶意行为,但是如果您提供数据,则可以使用 eval()。有关更多信息,请参阅 GWT OverlayTypes 教程。
    • 感谢您的帮助。我结束了用 JSON.parse 解析完整的 JSON 实体,然后尝试使用覆盖类型。更简单的解决方案被证明是几个 JSNI 方法访问 JSO 的不同部分。很多方法(我有 JavaScript :|),但比我需要的自然解析器快 10 倍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多