TL;DR: Boost ASP.NET Core 3.0 speed with async calls, data access optimization, caching, and more! Minimize synchronous operations, optimize database interactions, leverage caching techniques, and implement compression to deliver blazing-fast web applications.
Performance is very important; it is a major factor in the success of any web application. ASP.NET Core 3.0 includes several enhancements that scale back memory usage and improve turnout. In this blog post, I provide 10 tips to help you improve the performance of ASP.NET Core 3.0 applications by doing the following:
Try to avoid synchronous calling when developing ASP.NET Core 3.0 applications. Synchronous calling blocks the next execution until the current execution is completed. While fetching data from an API or performing operations like I/O operations or independent calling, execute the call in an asynchronous manner.
Avoid using Task.Wait and Task.Result, and try to use await. The following code shows how to do this.
public class WebHost { public virtual async Task StartAsync(CancellationToken cancellationToken = default) { // Fire IHostedService.Start await _hostedServiceExecutor.StartAsync(cancellationToken).ConfigureAwait(false); // More setup await Server.StartAsync(hostingApp, cancellationToken).ConfigureAwait(false); // Fire IApplicationLifetime.Started _applicationLifetime?.NotifyStarted(); // Remaining setup } }
Entity Framework 3.0 Core also provides a set of async extension methods, similar to LINQ methods, that execute a query and return results.
Asynchronous queries avoid blocking a thread while the query is executed in the database. Async queries are important for quick, responsive client applications.
Examples:
public async Task<List> GetBlogsAsync() { using (var context = new BloggingContext()) { return await context.Blogs.ToListAsync(); } }
Asynchronous saving avoids a thread block while changes are written to the database. It provides DbContext.SaveChangesAsync() as an asynchronous alternative to DbContext.SaveChanges().
public static async Task AddBlogAsync(string url) { using (var context = new BloggingContext()) { var blogContent = new BlogContent { Url = url }; context.Blogs.Add(blogContent); await context.SaveChangesAsync(); } }
Improve the performance of an application by optimizing its data access logic. Most applications are totally dependent on a database. They have to fetch data from the database, process the data, and then display it. If it is time-consuming, then the application will take much more time to load.
Recommendations:
You can find approaches that may improve the performance of your high-scale apps in the new features of EF Core 3.0.
Increase the performance of an application by reducing the number of requests to the server. Avoid calling the server every time and cache the data instead. Store the response for the future, and use it the next time you make a call for the same response.
These are some caching techniques:
Middleware controls when responses are cacheable. It stores responses and serves them from the cache. It is available in the Microsoft.AspNetCore.ResponseCaching package, which was implicitly added to ASP.NET Core.
In Startup.ConfigureServices, add the Response Caching Middleware to the service collection.
public void ConfigureServices(IServiceCollection services) { services.AddResponseCaching(); services.AddRazorPages(); }
ASP.NET Core 3.0 uses System.Text.Json Namespace for JSON serialization by default. Now, you can read and write JSON asynchronously. This improves performance better than Newtonsoft.Json. The System.Text.Json namespace provides the following features for processing JSON:
Reducing the number of HTTP requests is one of the major optimizations. Cache the web pages and avoid client-side redirects to reduce the number of connections made to the web server.
Use the following techniques to reduce the HTTP requests:
By reducing HTTP requests, these techniques help pages load faster.
Exceptions should be rare. Throwing and catching exceptions will consume more time relative to other code flow patterns.
Response compression, which compresses the size of a file, is another factor in improving performance. In ASP.NET Core, response compression is available as a middleware component.
Usually, responses are not natively compressed. This typically includes CSS, JavaScript, HTML, XML, and JSON.
(source: AspNetCoreDiagnosticScenarios)
Package: Microsoft.AspNetCore.ResponseCompression is implicitly included in ASP.NET Core apps.
The following sample code shows how to enable Response Compression Middleware for the default MIME types and compression providers.
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseResponseCompression(); } }
These are the providers:
public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(options => { options.Providers.Add<BrotliCompressionProvider>(); options.Providers.Add<GzipCompressionProvider>(); options.Providers.Add<CustomCompressionProvider>(); options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "image/svg+xml" }); }); }
HttpContext accessibility is only valid as long as there is an active HTTP request in ASP.NET Core. Here are some suggestions for accessing HttpContext from Microsoft’s documentation:
Client-side optimization is one important aspect of improving performance. When creating a website using ASP.Net Core, consider the following tips:
Bundling combines multiple files into a single file, reducing the number of server requests. You can use multiple individual bundles on a webpage.
Minification removes unnecessary characters from code without changing any functionality, also reducing file size. After applying minification, variable names are shortened to one character, and comments and unnecessary whitespace are removed.
Load JavaScript files at the end. If you do that, static content will show faster, so users won’t have to wait to see the content.
Use a content delivery network (CDN) to load static files such as images, JS, CSS, etc. This keeps your data close to your consumers, serving it from the nearest local server.
Now you know 10 tips to help improve the performance of ASP.NET Core 3.0 applications. I hope you can implement most of them in your development.
Syncfusion provides more than 70 high-performance ASP.NET Core UI controls that are lightweight, modular, and responsive, including our DataGrid, Charts, and Scheduler controls. Feel free to try them and provide your feedback in the comments section.
You can also contact us through our Support Forum, Direct-Trac, or Feedback Portal. We are happy to assist you!