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

に比べて、これは非常に高速です (私の例では 20 回) JS_EvaluateScript。このコードは非常に単純化されていることに注意してくださいstring。何らかの方法で引数を渡す必要があります。(どうすればよいのか、私にはよくわかりません。) また、失敗することもあるので、そうする必要があるかもしれJS_ReportPendingException()ませgo_back()ん。

于 2013-05-14T08:13:51.963 に答える