Recent I start working on MVC with BootStrap for building the great Web UI. I am building a menu with several menu items and found out that it is not setting as “active” in the class of the item when a page is loaded.
By default the MVC template doesn’t add the active class to the “li” item in the menu. So I have to add the class=”active” to the “li” to indicate the active menu item.
Above is the code that is used for the actual menu that create the menu in the first screenshot. if you look at line 8, you will see the class=”active”, this is what makes the active menu item. In order for us to do this, we need to know what page is currently loaded and then apply the active class css to the corresponding “li” element. The best way to do this, is to create a HTML helper to handle this for us.
Now, let’s try to create a new folder in the project and called “Helpers”. Then add a new class named “HtmlHelpers.cs” (from my sample, I used KenLinHtmlHelpers). here we could create an extension method of the HtmlHelpers method. We do this by creating a static class.
As you can see, I have created 2 method, IsActive and IsActiveController. The only difference is, do you want to take Action into one of the input parameter. If you want to set class is active whenever it is in the specific controller, you could use IsActiveController. Otherwise, you may use IsActive if you want the active class only in exactly the specified Action and Controller. Please also note that, I am letting the activeClass and inActiveClass input as optional with a default value.
Now we could update our cshtml as below,
Look carefully on each “li” item now. There is a new HtmlHelper method to check and show if it is the active controller. Please also look carefully, I have also called the method in line 9, for the parents of the dropdown Menu.
NOTE: You have to reference the class in the top of the view page that you are using the IsActive or IsActiveController method in. Just add the code as line 1 of the above screenshot.
Last 2 weeks, I run MVC training kit to IIS 7.5 and was trying to figure out the baseline for the performance tuning for my project. I tested 3 Scenarios,
S1) Hosting MVC 1.0 Training Kit in Application under Default Website
S2) Hosting MVC 1.0 Training Kit in New Website with port 8081
S3) Hosting my company’s MVC Project in New Website with port 8082
And their result of max throughput on Default Page is around,
R1 Result Screen Shot
R2 Result Screen Shot
This time, I tested in more scenarios,
S4) Moving MVC 1.0 Training Kit to root of Default Website
S5) Hosting MVC 1.0 Training Kit in Application under New Website with port 8081
S6) Hosting my company’s MVC Project in Root of Default Website
And their result now are,
R4 Result Screen Shot
R5 Result Screen Shot
R6 Result Screen Shot
OK, let me group the result in a table and so we could view all results more clear.
|MVC 1.0 Kit in Default Website
|MVC 1.0 Kit in New Website with port 8081
|Company MVC Project in Default Website
|Company MVC Project in New Website with port 8082
Now the results are showing that
1) The performance will be gained about 10% if you move the MVC project from Application under website into root of website.
2) The performance will be gained in a range from 240% – 1325% if you move the MVC project from Default Webste to New Website.
Recent, I am focusing on MVC/.NET/IIS performance because of my job duty. I have to try and running load test in order to get the number of max thoughput, so that I could figure out a baseline for the web projects in my working company. I then setup a computer to host IIS with MVC projects. Here is what I get,
CPU: Core 2 Due E8400
Ram: 4Gb DDR2-800
OS: 64-bit Windows 2008 R2 Enterprise Edition
Data: SQL 2008 Express Edition (for training kit data) + XML files (for my project data)
CPU: Dual-Core E5300
Ram: 4Gb DDR2-800
OS: 32-bit Windows 2008 Enterprise Edition SP2
Apache JMeter v2.3.4 with Java Runtime v22.214.171.124
Hosting MVC 1.0 Training Kit
Hosting as Application in Virtual Directory in Default Website
Separate Application Pool from default website
Testing with 100 threads, 500 threads, 1000 threads and 1500 threads
Default Page: ~200/sec
About Page: ~190/sec
Customers Page: ~73/sec
Interesting, this is the first time I try to do some benchmark. And I found out the performance between “Virtual Directory under Default Website“ and “New Website“ is hugh. It is 15 times difference. I tried to look around and still cannot figure out the reason. I will come back here later when I have some updates.
P.S., the above number of the max thoughput are just for reference. They might be up or down with difference hardware and applications installed. In my testing, Server CPU is running up to 100% already. So the bottleneck may be SQL service in same machine, network loading, Machine is not a “REAL” server hardware….etc.