我使用的代码如下:
JS_EvaluateScript(context, global,"go_back('blabla')", 17, "", 1, &R);
致电go_back()
,已经在context
。但这非常慢,我认为因为每次都必须编译字符串。
我试图找到以快速方式多次调用同一段代码的方法,无需重新编译或每次创建一些对象。但是Mozilla文档和源代码没有这样组织,只有一个参考,你需要知道每个函数才能做出任何选择。
所有提示?对此最好的做法是什么?
答案 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()
有时会失败。