Javascript 在node.js中创建具有低延迟的V8实例
我有一个node.js Web服务器,它应该执行一个javascript字符串,该字符串在运行时以低延迟传递。我基本上是在寻找以下java代码的node.js版本:Javascript 在node.js中创建具有低延迟的V8实例,javascript,node.js,v8,Javascript,Node.js,V8,我有一个node.js Web服务器,它应该执行一个javascript字符串,该字符串在运行时以低延迟传递。我基本上是在寻找以下java代码的node.js版本: import com.eclipsesource.v8.V8; public class MainC { private static V8 v8; private static int result; public static void main(String[] args) { long time0 =
import com.eclipsesource.v8.V8;
public class MainC {
private static V8 v8;
private static int result;
public static void main(String[] args) {
long time0 = System.nanoTime();
createRuntime();
long time1 = System.nanoTime();
String script = "x(0,10000); "
+ "function x(y,z) { "
+ " if (z>0) {"
+ " return x(y+1,z-1); "
+ " } else {"
+ " return y;"
+ " } "
+ "}"
+ "";
simulateHTTPRequestAndExucuteScript(script);
long time2 = System.nanoTime();
System.out.println("Result: " + result);
System.out.println("Time for 'createRuntime()' : " + ((time1-time0)/1000000.0) + " ms");
System.out.println("Time for 'executeIntScript()' : " + ((time2-time1)/1000000.0) + " ms");
}
private static void createRuntime() {
v8 = V8.createV8Runtime();
}
private static void simulateHTTPRequestAndExucuteScript(String s) {
result = v8.executeIntScript(s);
}
}
哪些产出:
Result: 10000
Time for 'createRuntime()' : 741.709313 ms
Time for simulateHTTPRequestAndExucuteScript()' : 0.888719 ms
脚本的运行时创建和执行是两个独立的任务。注意,10000个递归调用的实际执行时间<1ms。初始化运行时的相对较长时间并不重要,因为这可以在传递字符串之前完成
如何使用nodes.js创建V8运行时和低延迟javascript代码注入?eh。。。。js是一个v8运行时包装器。 您不需要使用node.js创建、注入等等 阅读基本节点关于页面: 基本上,你编写JavaScript,通过NoDE.js运行(它也是V8,用C++代码包加上额外的C++ LIBs),就是这样。 在您的例子中,您通过nodejs运行的主js文件将执行您拥有的js代码(该函数(x)…),并根据需要调用它多少次 要运行js文件,只需执行“node my jsfile.js” 就这些。你试过nodejs吗
var vm = require('vm');
var script = "result = x(0,10000); "
+ "function x(y,z) { "
+ " if (z>0) {"
+ " return x(y+1,z-1); "
+ " } else {"
+ " return y;"
+ " } "
+ "}"
+ "";
var context = {result: null};
vm.createContext(context);
vm.runInContext(script, context);
console.log(context.result);
问题是在我的电脑上这需要几个100毫秒。因此,我正在寻找一种将初始化V8和执行js文件分开的方法,就像在java代码中一样。我不确定您是否理解V8和nodejs是什么,在java代码中,您没有计算初始化java jvm所需的时间,因此这是一种虚张声势。启动nodejs实例需要时间。一旦它启动,您可以打开一个套接字并请求来自任何其他项目(比如java)的传入请求,当对nodejs的请求到来时,它可以立即处理它,而不是等待v8启动,因为它已经在运行了,然后通过套接字再次返回输出。我更改了代码以更清楚地说明我的意思。介于
long-time0=System.nanoTime()之间
和longtime1=System.nanoTime()代码>V8已初始化。这需要741毫秒。在这个阶段,将要执行的实际脚本是未知的。介于longtime1=System.nanoTime()之间
和longtime2=System.nanoTime()代码>,创建并执行脚本。这需要0,8毫秒。我的目标用例是:1)Web服务器启动。2) Webserver初始化V8实例并等待请求。3) 传入的httprequest将js代码作为字符串作为参数,并在V8->响应请求的最短时间中执行。child_process.fork()创建一个新的节点实例。您可以向它传递一个JS文件,并通过send()进行通信@chrisvanhooser你能显式地编写代码吗?我只发现fork需要js代码。send()不注入js代码。它只能与已经存在的代码通信。