在 node.js 中以低延迟创建 V8 实例

Create V8 instance in node.js with low latency

我有一个 node.js 网络服务器,它应该执行一个 java 脚本字符串,它在运行时以低延迟传递。我基本上是在寻找以下 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 次递归调用的实际执行时间小于 1 毫秒。初始化运行时相对较长的时间并不重要,因为这可以在传递字符串之前完成。

如何使用 nodes.js 完成 V8 运行时创建和低延迟 java脚本代码注入?

eh.... node.js 是 v8 运行time 包装器。 您不需要使用 node.js 创建、注入等 阅读关于页面的基本 nodejs:https://nodejs.org/en/about/ 基本上,您通过 node.js 编写 javascript、运行(这又是 v8,带有用 js 代码包裹的额外 C++ 库),仅此而已。

在你的情况下,你通过 nodejs 运行 的主要 js 文件将执行你拥有的 js 代码(那个函数 (x) ....)并调用它多少次。

到运行js文件只做"node my-jsfile.js"

就这些了。

你试过nodejs的vm module吗?

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);