In today’s world, every application is expected to perform faster & smoother, its a part of overall user experience(UX). With the advancement of technology and the infrastructure it widely expected that application will not only do the job perfectly but also within a reasonable time. No one now wants to wait 5 mins to load a page, or complete a job while using a system. When we are in such phase of UX evolution performance tuning is common software development practice.
In a simple description performance tuning is to identify the issues that slow down the application and apply few tricks to improve performance.
In this particular post, I will only focus performance tuning at web application. To tune any web application there is 3 Steps.
- Tune client end
- Tune server end
In order to make your move, you need to know first what is the problem with your application. Where you need to optimize, what are your priorities. To get these insights you need tools. Some tools will provide you the insights for client end, rest is for server end performance. Selecting right set of tool and using them is the first step of performance tuning.
Tune client end
Speed up the response time is crucial for UX and impacts the satisfaction of the user. Few tips/tricks can help you speed up your web application’s response time. Most of this time is tied up in downloading all the components in the page, minimize this time is the key to faster response.
Tune server end
Server side tuning mainly focus on low latency. How we can speedup the job that application is doing now at server end. This may involve database calls, file operations or make an external API call or may be few complex but poorly constructed business logic is the culprit. Newer Asp.Net framework s (4.5/5) is shipped (or to be shipped) with lots of performance improvement techniques or features, question is how efficiently we can utilize them.
Tools To Get Insight
Glimpse : For client end insight
Visual Studio Profiling : Visual Studio tool for performance diagnosis.
Client Side Tuning
- Use HTML5 async attribute for script files, to enable async loading
- Use a Content Delivery Network (CDN)
- Avoid CSS expressions
- Remove duplicate scripts
- Make Ajax calls cacheable
- Choose <link> over @import
- Optimize images
- Don’t scale images in HTML
- Don’t put empty image src
- Make favicon.ico small and cache-able
Server Side Tuning
- Run your site in Release mode, not Debug mode
- Reducing the number of requests to the server by bundling
- Use Base64 Data URIs
- Avoid passing null models to views
- Do not use Sessions or tempdata – which uses sessions
- Add gzip (HTTP compression) and static cache (images, css, …) in your web.config
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/>
- Tells the webserver to set the “Expires” header to a far future date, effectively telling the browser to cache things forever.
"Sun, 29 Mar 2020 00:00:00 GMT"
- If you use Razor, add the following code in your global.asax.cs, by default, Asp.Net MVC renders with an aspx engine and a razor engine. This only uses the RazorViewEngine.
- Replace foreach/for loop with linq wherever possible.
- Avoid multiple database calls to load related data that serves one request. Say you are to make 2 separate db calls to get chunk of users and total number of users for a request that do paging, marge those two request as one.
- Use in-memory cache for non cloud application and distributed cache for cloud one’s.
Optimizing or improving performance is a continuous effort. Monitor the application regularly, think about user behavior/interaction and the responses to gain max result. And as a note….load testing is excellent way to find out your application behavior before clients find those.