我现在对JavaScript引擎感到困惑.我知道V8是一个大问题,因为它将JavaScript编译为本机代码.
然后我开始阅读Mozilla SpiderMonkey,据我所知,它是用C语言编写的,可以编译JavaScript.那么这与V8有什么不同呢?如果这是真的,为什么Firefox不这样做呢?
最后,Rhino是否真的将JavaScript编译为Java字节代码,以便您获得Java的所有速度优势?如果没有,为什么人们在桌面上编写脚本时不能运行V8?
通过使用Java Scripting API,我可以在Java中执行JavaScript.但是,有人可以解释我需要添加到此代码中的内容,以便能够调用C中的函数:/Scripts/Jsfunctions.js
import javax.script.*;
public class InvokeScriptFunction {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
// JavaScript code in a String
String script1 = (String)"function hello(name) {print ('Hello, ' + name);}";
String script2 = (String)"function getValue(a,b) { if (a===\"Number\") return 1;
else return b;}";
// evaluate script
engine.eval(script1);
engine.eval(script2);
Invocable inv = (Invocable) engine;
inv.invokeFunction("hello", "Scripting!!" ); //This one works.
}
}
Run Code Online (Sandbox Code Playgroud) 我们的Java应用程序的一部分需要运行由非开发人员编写的javascript.这些非开发人员使用javascript进行数据格式化.(主要是简单的逻辑和字符串连接).
我的问题是如何设置这些脚本的执行以确保脚本错误不会对应用程序的其余部分产生重大负面影响.
基本上我需要设置javascript范围,只包括他们需要的内容,而不是更多内容.
我是Node.js的新手,我一直在阅读Narwhal,这是一个基于Rhino的框架.
我的问题:
我对(Rhino)脚本引擎和相关类的生命周期和并发语义感兴趣.特别:
Bindings
应该是线程安全的?ScriptEngine.eval(...)
?CompiledScript
实例Invocable.getInterface(...)
?我有一个Java 7项目,它使用Javascript来编写各种功能的脚本.到目前为止,我使用Rhino作为脚本引擎.我现在想转向Java 8,这也意味着我将取代Nashorn的Rhino.
Nashorn与Rhino的兼容性如何?我是否可以将其用作替代品,或者我是否可以预期我的某些脚本将不再工作并且需要移植到新引擎?是否有Nashorn不支持的Rhino常用功能?
在JDK6中,有没有办法在文件中加载多个脚本,并让一个脚本引用另一个脚本的方法?有点像"包括"?
我注意到ubuntu 10.04删除了spidermonkey包.犀牛看起来仍然在那里.犀牛和蜘蛛侠之间有什么区别(除了他们写的是什么语言).他们为什么要删除蜘蛛侠?
基于讨论将未知日期格式的字符串表示转换为Java中的Date,我想Date
在我的App-Engine项目中使用JavaScript 函数.但是,ScriptEngine不适用于App-Engine.所以我需要一点帮助才能转换成Rhino.这是我需要转换的ScriptEngine代码:
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine engine = scriptEngineManager.getEngineByName("JavaScript");
String script = "var date = new Date('" + dateInUnknownFormat + "'); var timestamp = date.getTime();";
engine.eval(script);
long timestamp = ((Double) engine.get("timestamp")).longValue();
Run Code Online (Sandbox Code Playgroud)
以下没有奏效
private static long parseDateUsingRhino(String dateInUnknownFormat){
Context mozillaJsContext = Context.enter();
Scriptable scope = mozillaJsContext.initStandardObjects();
String script = "var date = new Date('" + dateInUnknownFormat + "'); var timestamp = date.getTime();";
Object obj = mozillaJsContext.evaluateString( scope, script, "TestScript", 1, null );
Double timeDouble = …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来开始使用Oracle的新Nashorn JavaScript引擎.我已经DL了最新的OpenJDK 8(b65),看起来Rhino仍然是唯一包含的脚本引擎.
任何人都知道Nashorn何时(或在哪个版本中)将取代OpenJDK中的Rhino?或者甚至更好,我可以在哪里获得包含它的JDK?我知道Netbeans已经编写了一个调试器来使用它,只是不确定他们从哪里获得了库/代码来开始编写它.
有人有链接吗?
谢谢.
rhino ×10
javascript ×7
java ×6
nashorn ×2
spidermonkey ×2
concurrency ×1
java-8 ×1
lifecycle ×1
narwhal ×1
node.js ×1
openjdk ×1
sandbox ×1
scriptengine ×1
ubuntu-10.04 ×1
v8 ×1