首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT中大型数字数组的高效表示

GWT中大型数字数组的高效表示
EN

Stack Overflow用户
提问于 2009-06-27 17:30:48
回答 3查看 1.4K关注 0票数 2

我有一个timeseries类,在一天的过程中,它将保存100 K-200 K的值(基本上是市场滴答,均匀抽样)。在java方面,最具表现力的表现形式是使用双与之相反的是。我怀疑这种方法能否很好地映射到javasctipt中。

在Java方面,double[]数组必须定期增长(即分配一个新数组并将旧数组复制到新数组中)。例如,该类有一个方法,类似于:

代码语言:javascript
复制
public void add (long time, double price)
{
    ...
    if (_len == _prices.length)
        expand ();

    _prices[_len++] = price;
    ...
}

private void expand ()
{
    final double[] newprices = new double [_prices.length + 1024];
    System.arraycopy (_prices, 0, newprices, 0, _len);
    _prices = newprices;
}

现在,javascript有了一个不同的数组模型,并且允许通过超出最后一个索引的索引进行增量扩展,从而隐式地调整分配。

GWT有一个JsArrayNumeric,它允许查看和操作JS数字数组。JsArrayNative本来是来自JS的返回签名,但不能被实例化(是的,可以在JS端产生一些有条件的JSNI使用,但很难看)。

问题是,在GWT中,我可以在java类中使用什么数据结构来获得到JS表示的最佳映射?我在寻找最有表现力的方法:

  • 增加时间序列的价格(增长时间序列)
  • 访问timeseries (通常按索引扫描其中的一部分)/li>

例如,ArrayList是否映射到javascript中的紧密内容?这可能有一个更好的映射,使用原始double[]。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-03 02:56:42

JSArrayNumber将为您提供最有效的映射。ArrayList将为您指定值,这意味着每个值都有一个对象包装器。即使是double[]也将遵守Java初始值语义(确保将每个元素初始化为0.0)。JSArrayNumber将直接映射到保存原语数字的JavaScript数组上。

这里有一些标记,因为JavaScript数组可以为未初始化的索引返回未定义的值,而分配给索引实际上可以更改长度。你得把这些考虑进去。我通常创建JsArrayNumber的子类并使用断言来验证use。

此外,您不必使用JSNI来实例化JsArrayNumber:

代码语言:javascript
复制
JSArrayNumber a = JavaSriptObject.createArray().cast();
票数 1
EN

Stack Overflow用户

发布于 2009-06-27 18:42:14

我会担心把这么多数据送到浏览器并在那里进行处理。如果我在GWT应用程序中有数十万个数据点要处理,我会尝试完成大部分处理服务器端的操作,只需将简化的数据视图发送给浏览器以显示给用户。

票数 1
EN

Stack Overflow用户

发布于 2009-06-28 05:14:49

我还没有看过ArrayList类的编译输出,但我认为您不会看到ArrayList对double[]的原始性能有什么好处。尽管如此,我建议使用ArrayList,除非您已经分析过并且知道add或get方法实际上是应用程序的瓶颈。如果这不是瓶颈,那么您可以使用ArrayList编写更少的代码。

在尝试优化数据结构之前,请花一些时间分析您的应用程序。Firebug很好用,但是简单的老方法计时调用也能很好地理解应用程序花费时间的地方。如果使用firebug,请确保编译得很漂亮或详细,这样才能理解输出。

您已经暗示过了,但我要强调的是,不要在托管模式下进行概要分析,因为JVM具有与不同浏览器中的Javascript引擎大不相同的各种优化。还值得指出的是,这个堆叠溢出问题讨论了我在自己的应用程序中看到的更常见的GWT性能问题之一,这些应用程序在客户机上进行了相当繁重的数据处理。传闻证据,我知道,但我们还没有遇到任何问题,以ArrayList为瓶颈。

最后,Google会议举行了几次会谈,讨论了一些有趣的性能信息。

  • http://www.youtube.com/watch?v=q9hhENmVTWg
  • http://www.youtube.com/watch?v=hNEvr2eLad0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1053256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档