0

我正在使用这样的代码:

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

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

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

那么有什么提示吗?对此的最佳做法是什么?

4

1 回答 1

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. 请注意,此代码非常简化,您仍然需要以string某种方式传递参数。(我不确定自己该怎么做。)你可能需要JS_ReportPendingException()有时go_back()会失败。

于 2013-05-14T08:13:51.963 回答