1

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

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

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

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

在我的 Java 代码 (GWT) 中,我可以创建一个 JavascriptObject,但这足以容纳 Microsoft.Maps.Polygon 对象之类的东西吗?

谢谢!

4

2 回答 2

1

为什么不把它们缓存在 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);
}
于 2011-09-24T19:11:41.983 回答
1

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

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

于 2011-09-24T22:24:43.270 回答