Skip to main content

Miniprofiler and QUnit in ASP.MVC

Miniprofiler and QUnit are simple DLL, JS and CSS files that can be added to an ASP.MVC project to identify trouble spots in a project such as server side functions that run longer than anticipated or intermittent JS errors/warnings that show up in browsers' consoles.

Miniprofiler - keeps track of the amount of time functions in an ASP.MVC source code take to execute and displays the results on a browser. I have found that functions that take longer to execute are good candidates for refactoring.

To add Miniprofiler:
  1. Use Package Manager to add references to Miniprofiler in your project

    PM> Install-Package MiniProfiler

  2. Update Global.asax file as follows (this is for making the library available globally in your project)

    using StackExchange.Profiling;


    protected void Application_BeginRequest()
        if (Request.IsLocal)
    protected void Application_EndRequest()

  3. Add the following one line code to the_layout file (for razor) or master for (for form viewengine)

    if (Request.IsLocal)


More information about Miniprofiler

QUnit -  is a JS unit testing tool that provides a collection of functions that can be used for JS unit tests. In addition to unit test functions, QUnit also displays JS error messages in formatted panel on a browser.

To add QUnit:
  1. Copy the latest JS and CSS for QUnit from locally.
    (It might be a good idea to isolate the libraraies in a separate "Test" folder, in case there is a bundling routine for minifying JS and CSS files)
  2. Add reference to the CSS and JS files on your  _layout file (for razor) or master for (for form)
  3. Add error container rendering div's in the _layout file (for razor) or master for (for form)

    <div id="qunit"></div>
    <div id="qunit-fixture"></div>


More information on QUnit

With Miniprofiler and qUnit libraries your ASP.MVC project now has simple but yet powerfull tools for troubleshotting trouble spots and optimizing performance for an ASP.MVC application.


Popular posts from this blog

Turning WCF Service into .asmx for debugging

Even though .asmx web services are becoming dinosaurs of the new .NET world of WCF. I missed the simplicity of debugging code right in visual studio without: Creating a client to consume WCF service Attaching w3p.exe process and Adding break points  One quick solution: Turn WCF service into .asmx service with few lines of code, debug your code with asmx, and turn .asmx off during deployment.  Detail steps: 1- First take your WCF class and add WebService attribute to it Code Snippet /// <summary> /// Dual mode with .ASMX and WCF /// </summary> [ WebService (Namespace = "" )] 2- Then add WebMethod attribute to a function you want to expose in .asmx Code Snippet [ WebMethod ] public List < PageController . Page > DualFunction() { 3- Take the .svc file from your solution - copy and rename the copied file [YourOriginalWCFFile.asmx]. Open up the copied file and rename "ServiceHost&qu

ASP.MVC Real-time data processing with Sharded RavenDB and SignalR

In a move that some call "Radical” The Weather Channel recently swapped their enterprise Oracle and MySql Databases for NoSQL  MongoDB .  One word that could describe the rapid adoption of NoSQL databases compared to relational once is “ sharding .” Unlike relational databases, NoSQL systems allow developers to be active participants in the data storage process by providing a way to create logic (sharding strategy) that outlines how and where data could be stored, resulting in better scalability and improved performance. RavenDB , an open source NoSQL system for .NET that is easy to deploy (both as a standalone/embedded system) for an ASP.MVC application. SingalR is a tool that one can use in a .NET environment to add real-time client-server processing in an application. SignalR allows a developer to broadcast messages to all (or some) clients from a centralized client and/or server call. I was looking for a quick data-sharding example with embedded RavenDB that I can

Processing ASP MVC Web API Requests in Multi-threaded JS Web Worker

Unlike an asynchronous Ajax call, HTML5 Web workers provide an opportunity to run a Multi-threaded JavaScript code in modern browsers that support them . Each worker spawns an isolated thread with dedicated JavaScript Event Loop, Stack and Heap memory. For example a regular Ajax Call to MVC Web API service call goes through the following asynchronous call cycle. The JavaScript Event Loop in this case could be interrupted by events that are being executed on the UI; for instance, a "window.alert", could possibly stop all scripts on the page from executing until a user responds. Replacing the Ajax Call with HTML5 web worker provides a great way to run long running scripts in separate threads so that asynchronous code execution is not interrupted by UI events. Here is the a JavaScript worker implementation of the same MVC Web API call using a JavaScript web worker. Despite the advantages of using a web worker, implementing one requires working with some constr