从Java / Scala实例化Rhinoscript Native Objects

我正在尝试提高javascript片段评估程序的性能。 这些脚本片段可以引用存在于类似json的对象图(IE:Json AST)的字符串键控映射中的任意数量的变量。 我正在使用JDK 1.6和嵌入式Rhinoscript引擎(v1.6R2)。

目前,处理采用以下forms:

  1. 解析代码段以发现引用变量的名称
  2. 从地图中检索变量并将其序列化为json字符串
  3. Json字符串被分配给脚本开头的类似命名的变量
  4. 评估增强的脚本

我试图找出如何跳过json序列化阶段并创建直接Rhinoscript本机对象放置在脚本的“绑定”中。 然后,所需的步骤是:

  1. 解析代码段以发现引用变量的名称
  2. 从地图中检索变量并将其转换为原生Rhinoscript等价物
  3. 本机对象放置在绑定中
  4. 用所述绑定评估原始脚本

你知道我在哪里可以找到如何实例化原生rhinoscript对象的文档或示例吗?

如果你想修补我的scala学习项目可能会有所帮助。 我想出的任何答案都应该出现在那里……

http://subversion.assembla.com/svn/freshcode_public/learn_scala/datastore/src/test/scala/pkg/script

提前致谢。

所以经过多次摆弄后,我已经提出了一个足够的解决方案,虽然它没有产生我所希望的性能提升(仅快10%)。

该解决方案特定于Scala / Lift / Json,并包含在ScriptingUtil.scala文件中。

总结一下:

  1. Context.javaToJs()似乎并不适用于所有情况。 ( java.lang.RuntimeException: No Context associated with current Thread
  2. 需要Scriptable类型的“范围”对象。 我提出的解决方案并不漂亮,但它的工作原理。
  3. 要创建NativeArray:

     val na = new NativeArray(arr) na.setPrototype(ScriptableObject.getClassPrototype(scope, "Array"))