Main  /  Edit  /  History  /   /  Users Area

Case Study: CppCMS benchmarks vs Java, C#, PHP

Introduction

Long time ago I had posted a benchmarks comparing CppCMS based blog and PHP based one.

I wanted to compare real life applications with each other. For a long time I had been searching for similar applications in several technologies doing very similar jobs in leading technologies: PHP, Asp.Net and Java/JSP. The last two were particularly important as they use static type system and "compiled" languages as C# and Java that are known to be faster then other dynamic typed languages like PHP, Python, Ruby and Perl popular in web development.

Setup

Unfortunately I had failed to find such application, so finally I decided to write something representative and small on my own an application with following requirements:

  1. Uses simple time-out based page caching
  2. Uses MySQL and the database and keeps open connections in pool.
  3. For each request access to database (if page is not cached), fetches the page content and comments for "sample article" in blog.
  4. Converts text to HTML using a markdown filter and displays it on page.

I used following technologies:

I tested following parameters:

For each test the application was "warmed up" with 100 requests to fill the cache, and then 1000 request with max concurrency of 5 request are done, while certain percent of them is new pages and the other are taken from "warmed up" once.

Notes:

I used the fastest Markdown implementation I had found.

C# implementation is the same one that http://stackoverflow.com uses - it is actually heavily optimized implementation based on older C# implementation

The Java implementation is based on the above C# and the fastest one I had found.

Discount is the fastest C implementation of markdown that I had found.

Results:

Benchmarks Markdown

Memory

Summary

  1. C#, Java and PHP implementation behave very similarly and without significant differences.
  2. The memory usage of Java/Tomcat and Mono/Asp.Net was significantly higher - up one or two orders of magnitude in comparison to CppCMS and PHP
  3. Surprisingly PHP behaves very well, in comparison to "compiled" languages like Java and C#.

Revisiting

After doing some profiling it was clear that C implementation of Markdown was significantly faster then all other implementations. So I decided to create my own mini-markdown that make some basic handing of titles, lists, paragraphs and quotes at one level only. That is very simple syntax but implemented similarly in all 4 languages using same algorithm.

The results were following:

Benchmarks Markdown

The difference between CppCMS and other implementations was still significant but still much smaller then the difference between real markdown implementation. So the performance difference was less dramatic.

2nd Revision

And in the last revision I decided not to use any text filters by fetch ready HTML formatted content from DB and display it on the web as is.

Such comparison actually profile the most basic stuff:

  1. Caching
  2. SQL Connection
  3. Request/Response handling

And would ignore hundreds lines of code used in any web applications responsible for the actual business logic.

Benchmarks HTML

Conclusions

  1. Using C++ with CppCMS provides significant performance gains in developing web applications even in very basic case.
  2. The performance is effected not only by the framework itself but also by many other libraries that are in use. Using highly optimized C and C++ libraries may give significant performance gain in many cases.
  3. Such called "jit-compiled" languages as C# and Java and the frameworks based on the use significant amount of memory and still provide much lower performance then the one that can be achieved using real compiled languages like C++.
  4. It is good to remember that these benchmarks are still quite synthetic ones and in real life the actual performance depend on many factors - but using high quality and high performance libraries available for C++ have significant impact on performance.

Results Data

Markdown
---------
Miss %  CppCMS      Mono        PHP         JSP/Tomcat

0       3200.73     747.164     974.142     821.887
1       2891.2      427.727     724.173     337.736
2       2734.69     300.017     544.162     257.44
5       2285.95     162.686     301.507     130.023
10      1749.14     89.4447     174.724     68.5387
20      1247.86     47.7347     93.7919     25.7081
50      642.769     19.8311     38.979      15.1298
100     356.968     9.77116     20.1892     7.96328

Mini-Markdown
---------
Miss %  CppCMS      Mono        PHP         JSP/Tomcat

0       3103.14     763.222     1152.63     744.72
1       2933.97     728.971     1076.38     765.599
2       2944.42     726.338     1016.42     724.869
5       2804.44     661.613     866.32      822.927
10      2592.99     584.725     705.465     753.218
20      2239.03     471.576     507.021     674.488
50      1625.5      309.443     274.962     374.26
100     1156.09     197.123     159.974     164.515

HTML
-----
Miss %  CppCMS      Mono        PHP         JSP/Tomcat

0       3286.51     849.849     1147.21     808.038
1       3055.53     776.305     1137.35     748.829
2       2991.02     691.502     1122.88     693.439
5       2687.84     693.257     1074.22     756.618
10      2390.12     615.311     1016.27     604.452
20      1886.69     521.467     917.225     668.23
50      1947.93     346.672     669.693     289.656

System and Hardware

Related:

Code

The Code can be downloaded from there. note, to run it you will need to have some libraries installed and configure some hardcoded paths to make it run.

Hi. I have some suggestions: 1)For the tutorial, put all codes which are supposed to appear together in one cpp file or header file together at the end of the tutorial and make sure that line numbers do not start from 1. 2. 3. again in each section of tutorial. Currently, it is not clear where a function or a file begins and ends because there are broken pieces of codes and all being with 1. 2. 3. 2)I am not familiar with web programing. I think people like me prefer to use cpp files to wrap html codes or probably there are good html "designer", like GUI designers, that produces the code and I can copy-paste for the "view" in CMV.


Navigation

Main Page



Valid CSS | Valid XHTML 1.0