如何知道一个对象对于 GWT 和 IE8 中的 RPC 是不是“太大”?

Posted

技术标签:

【中文标题】如何知道一个对象对于 GWT 和 IE8 中的 RPC 是不是“太大”?【英文标题】:How to know if an object is 'too large' for RPC in GWT and IE8?如何知道一个对象对于 GWT 和 IE8 中的 RPC 是否“太大”? 【发布时间】:2010-11-08 19:50:38 【问题描述】:

我有一个在 Firefox 中运行良好的应用程序,但是当我在 IE8 中进行测试时,我收到了一个奇怪的错误:'Stack overflow at line: 0'

在 GWT 讨论组建议它可能与从 RPC 调用返回的大型/复杂对象有关后,我能够将问题缩小到我的一个 RPC 服务器调用,它确实返回了一个大型、复杂的对象.

如果错误确实是由于大型对象太大或太复杂,我怎么知道? “过大”的门槛在哪里?

来自 GWT 讨论的进一步 cmets 表明 Collections 对象可能是问题所在,但这是来自另一位 GWT 开发人员的经验。 GWT 文档或团队是否在任何地方记录了这一点?

但即便如此,问题仍然存在 - 我怎么知道它什么时候“足够小”?

【问题讨论】:

【参考方案1】:

我仍然不知道是否有关于对象大小的指定问题的答案,但我的问题最终是因为我在返回的对象中有对其他对象的递归引用。嗯,不是显式递归的,而是对象 A 对对象 B 的引用,对象 B 引用了对象 A 等等。它是一个家谱结构,因此每个个体都有关系图,其中包含对其他相关个体的引用,这些个体有引用回到相关个人等。在内存中工作正常,引用同一个对象,但显然 GWT 为 IE 生成的 javascript 无法正确反序列化它。

【讨论】:

【参考方案2】:

解决此问题的最佳方法是在编译 GWT 代码时使用 -compileReport 标志,这里有开发人员指南和一些示例:

http://code.google.com/webtoolkit/doc/latest/DevGuideCompileReport.html

我在 GWT 1.6.x 和 2.x 的 ant 脚本中使用了它。

PS:不知道您正在使用哪个版本的 GWT,我真的无法提供任何更有用的东西。但是,如果您使用的是 2.1 之前的版本,则可能需要注意——因为他们引入了 Data Presentation Widgets,这可能会解决您的对象“太大”的问题。

【讨论】:

我们使用的是 GWT 2.0。感谢您提供有关 compileReport 的提示。我只浏览了那个页面,但它看起来有很多有用的东西,将来会很高兴知道。【参考方案3】:

在加载我的 GWT 页面时,我也遇到了“第 0 行的堆栈溢出”。最后,在我的情况下,该应用程序仅在使用 Eclipse 调试模式 url 时抱怨,包括 ?gwt.codesvr=127.0.0.1:9997 sn-p。删除 URL 中的那个 sn-p 后,错误就消失了。

【讨论】:

以上是关于如何知道一个对象对于 GWT 和 IE8 中的 RPC 是不是“太大”?的主要内容,如果未能解决你的问题,请参考以下文章

GWT ie8 超时 12002

IE8 的 GWT 开发模式

GWT 编辑器和 GAE 数据存储

GWT(客户端)=如何将对象转换为 JSON 并发送到服务器?

GWT / Java Date api中的星期几

GWT 中的基本文件上传