从Java / Scala实例化Rhinoscript Native Objects
我正在尝试提高javascript片段评估程序的性能。 这些脚本片段可以引用存在于类似json的对象图(IE:Json AST)的字符串键控映射中的任意数量的变量。 我正在使用JDK 1.6和嵌入式Rhinoscript引擎(v1.6R2)。
目前,处理采用以下forms:
- 解析代码段以发现引用变量的名称
- 从地图中检索变量并将其序列化为json字符串
- Json字符串被分配给脚本开头的类似命名的变量
- 评估增强的脚本
我试图找出如何跳过json序列化阶段并创建直接Rhinoscript本机对象放置在脚本的“绑定”中。 然后,所需的步骤是:
- 解析代码段以发现引用变量的名称
- 从地图中检索变量并将其转换为原生Rhinoscript等价物
- 本机对象放置在绑定中
- 用所述绑定评估原始脚本
你知道我在哪里可以找到如何实例化原生rhinoscript对象的文档或示例吗?
如果你想修补我的scala学习项目可能会有所帮助。 我想出的任何答案都应该出现在那里……
http://subversion.assembla.com/svn/freshcode_public/learn_scala/datastore/src/test/scala/pkg/script
提前致谢。
所以经过多次摆弄后,我已经提出了一个足够的解决方案,虽然它没有产生我所希望的性能提升(仅快10%)。
该解决方案特定于Scala / Lift / Json,并包含在ScriptingUtil.scala文件中。
总结一下:
- Context.javaToJs()似乎并不适用于所有情况。 (
java.lang.RuntimeException: No Context associated with current Thread
) - 需要
Scriptable
类型的“范围”对象。 我提出的解决方案并不漂亮,但它的工作原理。 -
要创建NativeArray:
val na = new NativeArray(arr) na.setPrototype(ScriptableObject.getClassPrototype(scope, "Array"))