如何预编译SpiderMonkey代码以加快执行速度?

时间:2013-05-14 07:39:03

标签: spidermonkey

我使用的代码如下:

JS_EvaluateScript(context, global,"go_back('blabla')", 17, "", 1, &R);

致电go_back(),已经在context。但这非常慢,我认为因为每次都必须编译字符串。

我试图找到以快速方式多次调用同一段代码的方法,无需重新编译或每次创建一些对象。但是Mozilla文档和源代码没有这样组织,只有一个参考,你需要知道每个函数才能做出任何选择。

所有提示?对此最好的做法是什么?

1 个答案:

答案 0 :(得分:0)

JSFunction * FUNC = 0;

static JSBool my_native(JSContext *cx, uintN argc, jsval *vp) {
    jsval R = JSVAL_FALSE;
    if (FUNC == 0) {
        const char *ARGS[1] = {"s"}, *src = "go_back(s)";
        FUNC = JS_CompileFunction(cx, 0, 0, 1, ARGS, src, 10, "", 0);
    }
    JS_CallFunction(cx, 0, FUNC, 1, &R, &R);
    return JS_TRUE;
}

JS_EvaluateScript相比,这非常快(在我的示例中为20次)。请注意,此代码非常简单,您仍需要以某种方式传递string参数。 (我不确定自己该怎么做。)而且您可能需要JS_ReportPendingException()因为go_back()有时会失败。