Javascript 在node.js中创建具有低延迟的V8实例

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 =

我有一个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 = 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代码。它只能与已经存在的代码通信。