First I am new to BlogEngine.Net, so the developer really need to answer your questions. I am putting my two cents in but may be totally way off base. Also, keep in mind my comment in regard to the low level verse high level programming language not
I posted in the article you referenced.
Q1: I am not familiar with Mono or MySQL and would like to see benchmarks of this platform ran on ASP.NET/MONO as in combination with MySQL/MsSQL Mono has also been reported as
inconsistent platform for benchmarking of ASP.NET Applications. Here is an example of some
overhead created by the Mono/Fast-CGI/Asp.Net combination as well as how to fix it. As far as the support I still see the conditionals in 1.4.5 for Linux and Mono, so it wont' hurt to try it. From looking at past releases, not every feature of the previous release is rementioned in the successive release
Q2: BE.Net supports some very impressive caching, although not evert. Which is another thing that may skew your benchmark versus a real word set up. For Example, a reall client will make up to 20 or 30 request for a single call of a web pages (images, stylesheets, javascripts, etc). Be.Net will actually combine the all javascripts into a single file and cache it to the client, Your scripted benchmark will probably overlook these real world benefits. Futher more ASP.NET has some awesome cacing utilities built into that BE.Net may not take full advantage of out of the box. There are entire books written on Performance Tuning ASP.NET Applications. As far as IIS Yes and No. There is the ability to cache content within IIS, but ASP.NET does not rely on that. However, in the real world using High performance Applications, you might enable both. Why?? Becuase no matter what web server your running, the web server must first intercept the request and decide who to hand it off to. The the Dll's or EXE responsible for handling that request is loaded and the request is passed on. When Caching is enabled in IIS, you can eliminate that step and prevent the calls to the ASP.NET handler in the first place. You could probably gain the two best performance gains in any ASP.NET Application by setting the output cahce for every page, as well as disabling the view state. Thhe viewstate is not disable by default becuase some controls rely on it to store post back data.
Q3: Yes, Be.net does support GZIP Encoding as well as DEFLATE; However
Mono has an issue with GZIP, so unless the mono build is compiled with the correct DLL's it will complain when running BE.NET. For that reason, GZIP is disabled by default in BE.NET (See blogSettings.CS). Additionally, when ran IIS can also be used as the compression mechanism.
Q4: Again I would like to see Be.Net Benchmarked on both MySQL and MsSQL so I know the answer to the MySQL vs MSSQL answer. However, the other things I would be concerned about is the ASP.NET application going to run on a 64 bit processor?? ASP.NET is CPU dependant I believe. Additionally, as I pointed out at the beginning of this post, there are several perfomance issues that have been documented running ASP.NET on the setup you suggest. Further, I may be wrong, but I am pretty sure that if I where to run the same benchmark on My own PHP/WordPress/MySql installation on my Windows 2003 server against the same set up on a *nix box, the *nix box will win. Why? we could speculate, but I would make that conclusion based on the fact that PHP(Perl) and MySQL are natively optimized to run on Linux. The Windows version is merely a port that is probably full of hacks that sacrifice performance for interoperability
Q5: Performance TIPS: Like I said there are entire books devoted to this subject. But for starters, enable the output cache, disable the viewstate. Disabling the session state also boost performance, but I am not sure if that will make Be.Net compain. In you fast CGI setup, make sure the socket for .aspx is mapped directory to the FASTCGI daemon. Its really not going to be fair if MONO starts incurring a whole bunch of unneeded overhead, outlined in the links above. I have not even looked at the setup scripts for the SQL, but that has a lot to do with performance. Setting up the correct Indexes and Primary keys are obviously imortant. I would imagine(and I may be wrong), the MySQL scripts do no take this into consideration. For the Web Side: Asp.Net has two main types of caching. Output Caching and Data Caching. Output caching caches the rendered HTML, and data caching, well that cache the data used to render and databound weboontrols. If you are going to really tune an application for high performance, you use both. I am not sure how much caching is built into BE.Net. But If I where to perform a performance based bench mark, I would A) set the pages up to use output caching and B) make sure I used data caching wherever it made sense. The Project Developers can provide you with the specifics in regard to BE.Net much better than I can. To Output cache the contents of a page, you would simply paste the following code to cache it for 20 minutes
<%@ OutputCache Duration="20" VaryByParam="None" %>
at the top of the ".ASPX". Data cache is a little more complex, and require mechanisms to add and remove data to the applications cache.
The most critical part of any application to implement caching is at the datalayer. Yes HTTP compression and OutPut Caching can also vastly improve perfomance, but the main reason for the performance gain in dynamic apps is that you don't have to hit the database on every page load.
Q6: Again, I am just getting familiar with this project and do not know all of the plugins. I also don't know what a markdown plugin is? You mention text
Frankly, I think your wasting your time trying to prove what the rest of the world already knows. A well built CPP app will destroy a way built PHP or ASP.NET app any day of the week.