[Interest] QJSEngine vs. (deprecated) QScriptEngine performance - old thing winning!
Jan 'Koviš' Struhár
jan.struhar at cs-soft.cz
Wed Oct 12 13:46:33 CEST 2016
On 10/12/2016 01:42 PM, Ulf Hermann wrote:
>> QJSEngine does not cache the compilation results if you just pass in
>> plain strings. I also don't think QScriptEngine can do this here (but
>> I haven't checked). QScriptEngine might be clever enough to
>> automatically use the interpreter rather than JIT-compiling such
>> small expressions. You can set the QV4_FORCE_INTERPRETER environment
>> variable to force QJSEngine to use the interpreter rather than the JIT.
>> In any case it's a waste to parse the expressions from strings over
>> and over and to not use the JIT. If you care about performance, you
>> should try to parse the expressions only once.
> Uhm ... the secret here is that you keep a QScriptProgram as the
> m_expression of your label item, which is basically a JS function
> compiled for QScript. So, of course, if you take the source code from
> that and then recompile it for QJSEngine on every iteration it will be
> slower than if you evaluate it straight away in QScriptEngine. If you
> instead kept a QJSValue with the same expression written as a JS
> function, QJSEngine would probably be much faster as QScriptEngine
> would have to recompile on each iteration.
That was probably the silver bullet I looked for. It did not poke me in
the eye when I read through QJSEngine docs.
I am just on evaluation your tip - many thanks for advice!
More information about the Interest