[Qgis-developer] Benchmarking QgsExpression against V8

Andreas Neumann a.neumann at carto.net
Tue Jan 10 03:49:08 EST 2012


 Hi Pirmin,

 Interesting - and thanks for your work.

 As a user I can live with different syntax as long as it is familiar. 
 Either Python, SQL or javascipt syntax would be fine for me. All three 
 are fairly common and documented.

 If it speeds up things substantially, I would happily switch to 
 javascript syntax.

 Andreas

 On Tue, 10 Jan 2012 01:00:11 +0100, Pirmin Kalberer wrote:
> Hi all,
>
> Following the recent enhancements of QGsExpression, I was wondering
> whether it
> wouldn't make sense to integrate a language intepreter instead of 
> creating
> another language.
> One candidate would be Google's V8 JavaScript engine
> (http://code.google.com/p/v8/). Since embedding this C++ library is
> easy, I've
> conducted a few quick benchmarks against QgsExpression. Code is 
> attached.
>
> Test 1:
> Qgs: '1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || 
> '0'
> total_avg: 3.380211
> V8: '1' + '2' + '3' + '4' + '5' + '6' + '7' + '8' + '9' + '0'
> total_avg: 0.556035
> Fact: 6.0791335
>
> Test 2:
> Qgs: 1+1=2 AND 5>1
> total_avg: 4.072254
> V8: 1+1==2 && 5>4
> total_avg: 0.864054
> Fact: 4.7129624
>
> Test 3:
> Qgs: replace(lower( 'AAAAAAAAAAxxCCCCCCCC'), 'xx', 'BB')
> total_avg: 3.480217
> V8: 'AAAAAAAAAAxxCCCCCCCC'.toLowerCase().replace('xx', 'BB')
> total_avg: 0.856053
> Fact: 4.0654224
>
> Test 4:
> Qgs: regexp_replace( 'AAAAAAAAAAxxCCCCCCCC', 'x+', 'b')
> total_avg: 2.952184
> V8: 'AAAAAAAAAAxxCCCCCCCC'.replace(/x+/, 'b')
> total_avg: 0.668042
> Fact: 4.4191593
>
> Test 5:
> Qgs: CASE WHEN (15 = 11 or 15 = 13 or 15 = 15 or 15 = 21) THEN 15 END
> total_avg: 1.4664916
> V8: if ([11,13,15,21].indexOf(15)>=0) { 15 }
> total_avg: 0.2672168
> Fact: 5.4880217
>
> This benchmarks show that QgsExpression evaluation is between 4 to 6 
> times
> slower than V8. This is much better than I expected, but it's still 
> factor 4
> to 6...
> So I think it's worth discussing pros and cons of using V8 as an 
> expression
> engine. I see the following points:
>
> Pros:
> -Better performance
> -Full Javascript language set included
> -Possibility for writing custum functions
>
> Cons:
> -New language for expressions
> -More fat (3.7MB for libv8.so)
>
> V8 would be a new runtime dependency but would replace the flex and
> yacc build
> dependencies.
>
> Any other points?
>
> Regards
> Pirmin

-- 
 --
 Andreas Neumann
 Böschacherstrasse 10A
 8624 Grüt (Gossau ZH)
 Switzerland


More information about the Qgis-developer mailing list