Save Time/Money With Open ERP Web Client

openerp's picture
Submitted by openerp on Wed, 05/13/2009 - 11:31
Category:

Most of you, if following the latest development on Launchpad project area, might be aware of the big changes with Open ERP Web Client. We migrated the web client to CherryPy3 droping the TurboGears completely and migrated Kid templates by faster Mako templates as a major step to make the Web Client much more faster and easier to deploy.

All the Kid templates are converted to faster Mako templates, i18n/l18n features have been partially reimplemented using Python Babel, CherryPy2 (TG is built on top of CP2) was replaced with CherryPy3, the latest, much better version of CherryPy Server.

This greatly reduced the pain of getting started with and deploying of Open ERP Web client. Now the number of third party dependencies are reduced to 3-4 pure Python libraries which you can install within the local lib dir with the help of `populate.sh` script, found under the same lib directory. Just get the source from Launchpad, run the populate.sh and launch the web client...

The initial test results are very impressive. We have seen almost 3-5 time speed improvement. Here are the benchmark results of the latest trunk version against the stable 5.0 branch which is running over TurboGears.

The benchmark test was done using Apache Benchmark Tool against relatively bigger Customer Invoice Form view. The command was used like this:

$ ab -C session_id=$session -n 100 "http://localhost:8080/form/edit?model=account.invoice&id=1"

where $session should be replaced with session id (you can use firebug to see the session id).

Here is the comparison between before and after improvements in Open ERP web client

Result of Open ERP Web 5.0 (TurboGears + Kid)

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient).....done

Server Software: CherryPy/2.3.0
Server Hostname: localhost
Server Port: 8081

Document Path: /form/edit?model=account.invoice&id=1
Document Length: 79965 bytes
Concurrency Level: 1
Time taken for tests: 166.323 seconds

Complete requests: 100

Failed requests: 0
Write errors: 0
Total transferred: 8022000 bytes

HTML transferred: 7996500 bytes
Requests per second: 0.60 [#/sec] (mean)
Time per request: 1663.228 [ms] (mean)
Time per request: 1663.228 [ms] (mean, across all concurrent requests)
Transfer rate: 47.10 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 1556 1663 71.3 1663 1856
Waiting: 1555 1662 71.3 1662 1855
Total: 1556 1663 71.3 1663 1856
Percentage of the requests served within a certain time (ms)
50% 1663
66% 1681
75% 1695
80% 1715
90% 1775
95% 1801
98% 1829
99% 1856
100% 1856 (longest request)

Result of Open ERP Web Trunk (CherryPy3 + Mako)

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient).....done

Server Software: CherryPy/3.1.2
Server Hostname: localhost
Server Port: 8080

Document Path: /form/edit?model=account.invoice&id=1
Document Length: 90394 bytes

Concurrency Level: 1
Time taken for tests: 42.054 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 9063400 bytes
HTML transferred: 9039400 bytes
Requests per second: 2.38 [#/sec] (mean)
Time per request: 420.543 [ms] (mean)
Time per request: 420.543 [ms] (mean, across all concurrent requests)
Transfer rate: 210.47 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 382 420 27.7 415 523
Waiting: 381 420 27.7 415 522
Total: 382 420 27.7 416 523
Percentage of the requests served within a certain time (ms)
50% 416
66% 418
75% 420
80% 424
90% 436
95% 512
98% 520
99% 523
100% 523 (longest request)

Conclusion

You can see significant performance boost in second test result. We observed 3-5 time speedup. There are still room to improve the performance further. Like reducing RPC calls, catching results of some computationally heavy functions. Implementing a way to directly call server methods if web client and server are installed on the same system (completely eliminating TCP layer).

What's next?

Besides this, we also planned to make web client modular implementing plugin system which let you create your own plugins to extend the functionality of the web client. We appreciate your ideas and suggestions in this regards.

Also, we have planned for a better main menu & tabified interface (similar to GTK client) where you always have access to the main menu and all views will be opened in tabs inside the same html page instead of utilising browser tabs. We had discussion about such interface previously, you can search the forum for a very good mockup implementation.

We are also thinking of writing some automated unit tests using CP3 testing API. We already wrote some basic tests to check how to proceed. You can run all tests by launching `run-tests.py` script...

We greatly appreciate you ideas, suggestions in this regards...

Thanks and regards

Open ERP Team