Медленная итерация через JSONArray в GWT - PullRequest
8 голосов
/ 25 августа 2011

Я использую GWT для создания приложения и сталкиваюсь с серьезными проблемами со скоростью, что, по моему мнению, будет довольно быстрым. У меня есть JSONObject с данными в следующей структуре (но это гораздо больше):

{"nodeData" : [ 
                { "name":"one", "attributes":["uno","dos"]}, 
                {"name":"two", "attributes":["tres"]}
              ]
}

Я пытаюсь перебрать объект JSON, чтобы сохранить все атрибуты в массиве, который есть у каждого объекта узла, с размерами атрибутов от 4 до 800.

JSONObject JSONnode = nodeData.get(i).isObject();
Node node = new Node(JSONnode.get("name").toString();
JSONArray attributeArray = JSONnode.get("Attributes").isArray();
int attributeSize = attributeArray.size();


for(int j = 0; k < attributeSize; j++){
    node.attributeArrayList.add(attributeArray.get(j).toString();
}

Цикл for, который я выполняю, занимает около минуты, что кажется слишком долгим, и я не уверен, как его улучшить. Минута находится в режиме разработки, но я не знаю, будет ли она быстрее, когда я ее скомпилирую.

Ответы [ 3 ]

3 голосов
/ 16 марта 2012

Вы пробовали использовать оверлеи?

Основы кодирования GWT - типы наложений JavaScript

Вы можете довольно легко создавать типы наложений: -

// An overlay type
class Customer extends JavaScriptObject {

  // Overlay types always have protected, zero-arg ctors
  protected Customer() { }

  // Typically, methods on overlay types are JSNI
  public final native String getFirstName() /*-{ return this.FirstName; }-*/;
  public final native String getLastName()  /*-{ return this.LastName;  }-*/;

  // Note, though, that methods aren't required to be JSNI
  public final String getFullName() {
    return getFirstName() + " " + getLastName();
  }
}

Очень прост в использовании, и я думаю, что это будет намного быстрее, чем при использовании объектов JSONObject.

0 голосов
/ 27 сентября 2011

Если ничего не помогает, вы всегда можете написать это на нативном Javascript и вызвать его через JSNI.

0 голосов
/ 27 сентября 2011

Как вы используете GWT? Внутри IDE? По моему опыту, если слишком много точек останова замедляет процесс выполнения, может быть, вы могли бы это проверить? Особенно, когда я вижу, что в производстве это выглядит нормально ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...