Хранение объектов Javascript в Java - PullRequest
1 голос
/ 24 сентября 2011

У меня есть объект Java, и в нем существует пространственная форма, определяемая строкой «хорошо известного текста». При наведении курсора на этот объект в моем пользовательском интерфейсе GWT мой код передает эту строку в Javascript через JSNI, который, в свою очередь, выполняет кучу разборов и создает соответствующие формы API Bing Maps.

Упрощенным примером этого может быть приложение карты, где каждое состояние существует в виде объекта, содержащего имя состояния и строку, определяющую его периметр. При наведении курсора мыши на название состояний в моем пользовательском интерфейсе строка периметра анализируется, и на карте рисуется репрезентативная фигура.

Итак, сейчас мой код выполняет передачу, анализ и создание каждый раз, когда пользователь наводит курсор на мой объект. Я ищу способ синтаксического анализа строк и создания объектов по одному разу каждый, надеясь сохранить полные, уже созданные объекты Javascript (формы Bing Maps) в самих исходных объектах Java. Это, я думаю, безусловно, должно ускорить процесс - пользовательский интерфейс начинает выглядеть запаздывающим, когда ему приходится анализировать и создавать несколько очень подробных объектов карты каждый раз, когда пользователь перемещает мышь к другому элементу.

Можно ли хранить объекты Javascript такого типа в моих объектах Java, а затем возвращать их обратно в Javascript всякий раз, когда они мне нужны?

В моем Java-коде (GWT) я могу создать JavascriptObject, но достаточно ли этого для хранения чего-то вроде объекта Microsoft.Maps.Polygon?

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

Вы можете очень хорошо иметь поле в своем классе или переменную типа JavaScriptObject для хранения любого объекта из JS.

GWT делает это уже в нескольких местах: например, в com.google.gwt.xml.client.impl.DOMItem.

1 голос
/ 24 сентября 2011

Почему бы просто не кэшировать их в javascript? Создав объект в Javascript, сохраните его в объекте кэша со строкой в ​​качестве ключа. Затем, всякий раз, когда вы получаете запрос на новый объект, вы проверяете кэш и используете предварительно созданный, если он есть. Если предварительно не создано, создайте его и добавьте в кеш.

Если вы хотите предварительно создать несколько объектов, вы можете сделать так, чтобы java просто вызывал javascript с набором строк, для которых он предварительно заполнил бы кеш. Это сохраняет все объекты Javascript на стороне забора Javascript и все объекты Java на их сайте, но все же должно способствовать повышению производительности.

Это общая идея в псевдокоде:

var cache = {};

function createJSObject(stringArgument) {
    if (stringArgument in cache) {
        return(cache[stringArgument]);
    }
    var obj;

    // create the object here
    // ...

    // cache the object we created
    cache[stringArgument] = obj;
    return(obj);
}
...