GWTによって生成されたjavascriptコードは、HashMap.iterator()
非常HashSet.iterator()
に低速です。それをスピードアップする方法はありますか?
質問する
908 次
1 に答える
3
非常に遅いですか?もう少し具体的にする必要があります。100000 個の数値を合計する小さな例を次に示します。
final int N = 100000;
final long startInsert = System.currentTimeMillis();
final HashSet<Integer> set = new HashSet<Integer>(N);
for (int i = 0; i < N; i ++)
set.add(i);
final long stopInsert = System.currentTimeMillis();
RootPanel.get().add(new Label(
"Time to insert: " + (stopInsert - startInsert) + "ms"));
final long startIterate = System.currentTimeMillis();
final Iterator<Integer> iterator = set.iterator();
int sum = 0;
while (iterator.hasNext()) {
final Integer integer = iterator.next();
sum += integer;
}
final long stopIterate = System.currentTimeMillis();
RootPanel.get().add(new Label("Sum: " + sum +
", Time to iterate: " + (stopIterate - startIterate) + "ms"));
Core2 Duo でこれを試してみましょう:
Firefox 15 (コンパイルモード) での出力は次のとおりです。
Time to insert: 490ms
Sum: 4999950000, Time to iterate: 766ms
そしてChrome 21(コンパイルモード):
Time to insert: 130ms
Sum: 4999950000, Time to iterate: 105ms
それは開発モードよりも遅いです:
Firefox 15 (開発モード):
Time to insert: 16ms
Sum: 704982704, Time to iterate: 12ms
Chrome 21 (開発モード):
Time to insert: 59ms
Sum: 704982704, Time to iterate: 10ms
しかし、これが JavaScript 対 Java であることを考えると、結果は実際にはかなり良いものです。
(ところで、JavaScript (4999950000) と比較して Java (704982704) で合計が異なる理由を誰かが疑問に思う場合に備えて...これは予想されることです。 https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsCompatibilityを参照してください#言語)
于 2012-09-05T13:34:30.250 に答える