在Java中存储Javascript对象

在Java中存储Javascript对象,java,javascript,gwt,bing-maps,jsni,Java,Javascript,Gwt,Bing Maps,Jsni,我有一个Java对象,其中存在一个由字符串“已知文本”定义的空间形状。在我的GWT UI中,在这个对象的鼠标上方,我的代码通过JSNI将这个字符串传递给Javascript,然后JSNI进行一系列解析并创建适当的Bing Maps API形状 这方面的一个简化示例是一个地图应用程序,其中每个州作为一个对象存在,包含州名称和定义其周长的字符串。在我的UI中的州名称上方的鼠标上,将解析周长字符串,并在地图上绘制一个具有代表性的形状 所以现在,每当用户将鼠标移到我的对象上时,我的代码都会进行传递、解析

我有一个Java对象,其中存在一个由字符串“已知文本”定义的空间形状。在我的GWT UI中,在这个对象的鼠标上方,我的代码通过JSNI将这个字符串传递给Javascript,然后JSNI进行一系列解析并创建适当的Bing Maps API形状

这方面的一个简化示例是一个地图应用程序,其中每个州作为一个对象存在,包含州名称和定义其周长的字符串。在我的UI中的州名称上方的鼠标上,将解析周长字符串,并在地图上绘制一个具有代表性的形状

所以现在,每当用户将鼠标移到我的对象上时,我的代码都会进行传递、解析和创建。我正在寻找一种方法来解析字符串,并在每个字符串中只创建一次对象,希望将完整的、已经创建的Javascript对象(Bing映射形状)存储在原始Java对象中。我认为,这肯定会加快速度——当用户每次将鼠标移动到不同的项目时,UI必须解析和创建几个非常详细的映射对象时,UI开始显得滞后

是否可以将这种性质的Javascript对象存储在我的Java对象中,然后在需要时将它们带回Javascript?

在我的Java代码(GWT)中,我可以创建一个JavascriptObject,但这是否足以容纳类似Microsoft.Maps.Polygon对象的对象


谢谢

为什么不将它们缓存在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);
}

在类中可以有一个字段,或者一个
JavaScriptObject
类型的变量来存储来自JS的任何对象


GWT已经在一些地方做到了这一点:例如在
com.google.GWT.xml.client.impl.DOMItem

中,这是一个非常好的主意。我唯一关心的是缓存大量这些Javascript对象所需的浏览器内存。我会在这里再次尝试和评论-但多谢各位-这是一个非常好的解决方案。如果您担心总内存消耗,您可以实现一个LRU(最少,最近使用过的)缓存,一旦缓存达到一定数量的对象,您就可以扔掉一段时间没有使用过的旧对象。谷歌搜索“javascript lru缓存”将为您提供这方面的信息。但是,您可能应该首先测试内存使用情况,看看这是否必要。