[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 mailing list