How to Optimize Orchard CMS for Microsoft Azure
At Atilus, we realize that great web design and development is a balance of many disciplines, and the web is a unique place where what I do as a developer or how I set up a server can affect the businesses we work with. And with Google and other search engines playing such a critical role in the marketing we do for our clients, each site we develop must perform well (fast, no problems, etc.). Great performance isn’t JUST important for users, but also to ensure our sites stay ahead of and outrank their competitors. Speed, uptime, and time-on-site (which are all heavily influenced by what I do in the back end on our CMS and servers) are all things search engines are paying attention to and are vital to the success of any project. Not to mention – the more performance we can squeeze out of our servers the less expensive each server costs.
Orchard Performance Problems
I’ve put together a list of some of the most important and easy-to-implement optimizations we’ve discovered while using Orchard CMS over the last couple of years. Read my post on Orchard for a quick review on the platform and why it’s one of our go-to CMS.
Have you experienced a scenario like this –
Everything is all greased up and ready to go, but what’s this? Orchard CMS is using almost 1GB of RAM? So you begin to think, maybe Orchard is extremely fast because of all the caching? How is it that Orchard runs much better locally than on an Azure Web Server?! Caching, via Azure, does help the performance, but this site is new and not loaded with tons of data quite yet. Orchard’s footprint on the Azure web server should be much smaller.
This happened to us when we first started working with Azure.
At Atilus, we host more than 100 of our custom Orchard CMS websites on a single Azure web server. What I am going to discuss in this article will help make Orchard use fewer resources, which will directly affect the server website density. More sites on one Azure web server, that run faster and use less server resources, equals more money for you. I’m going to go out on a limb that we can all agree this is a good thing.
Let’s Define a Few Things
- Orchard CMS – Content Management System built on the MVC.NET framework
- Cache – Storing data in memory for later quick retrieval
- RAM – Random Access Memory, which the server uses to cache the DLLs, run the website, and store cached data from the site.
- DLL – Dynamic Link Library, which is the code compiled into a single file that the website uses to execute code needed to run the site
Orchard & Azure Performance Optimizations
When you download the source code for Orchard, you are downloading all of the source code and modules for Orchard. By default, Orchard sets the modules to dynamically compile. This means that you are uploading the source code to the server, and it’s compiling the code at run time instead of using precompiled libraries.
This is the single biggest optimization I’ve found when setting up Orchard to run as fast as possible on Azure – DON’T ALLOW ORCHARD TO COMPILE THE CODE AT RUNTIME.
For the most part, the libraries are already compiled, but if you download any from the gallery, you will soon see that many are not precompiled.
To solve this issue, we develop locally and download all of the modules and precompile them before loading them to the server. If you are using Visual Studio, then this process is made very simple by just building the application and then publishing it to the Azure server.
Publishing an Orchard CMS to Azure via Visual Studio
From the dashboard of your Azure website, choose “Download the publish profile”. Then, from Visual Studio, you select the Orchard Web and choose publish. You can then import the publish profile downloaded from Azure. Simple as that.
Orchard CMS Poor Performance – Debugging and Monitoring
In addition to the major optimization of simply pre-compiling everything before publishing to Azure, I’ve found a few additional tweaks that prevent problems and increase speed.
First, you always want to build the application in “Release” mode as opposed to “Debug” mode.
Next, Orchard CMS has a few settings that are located in the Orchard.Web/Config/HostComponents.config file, which will help remove a sporadic issue we have found that causes heavy RAM use. The optimization is simply setting “Disabled” to “True” for the following setting “Orchard.Environment.Extensions.ExtensionMonitoringCoordinator.” If your Orchard install was randomly taking up too much RAM on your system, doing this should solve the problem.
Optimizing Website Load Times: Azure and Visual Studio
As I mentioned above, speed and reliability are crucial. Nowadays, if a site or application isn’t loading extremely fast, you’re going to be losing users. This is to be expected and has (pretty much) always been the case. However, what IS NEW is the idea that Google and other search engines, via big data and their analytics tools, are tracking users’ time on your website…
And if users are leaving, Google and others will demote your website. If users stay (say, because you provide a great, fast experience), Google will boost your website.
So speed is critical. One component of speed is the server, one component is optimizations on the CMS/Application level, but a 3rd area is the front-end. Here, we use Visual Studio and Web Essentials.
Making sure to compress your images as well as minify all the stylesheets and JavaScript files can boost your website’s performance because it shrinks the file size by removing whitespace. I accomplish this via Visual Studio with the Web Essentials add-on, which automatically minifies your files for you.
The Round Up
There are always steps to take during the development process, including small tweaks here and there that lead to the software performing at its best. With everything configured and compressed, you’re left with a well-performing CMS that doesn’t overuse and abuse resources. Remember the configuration steps, compress and compress it some more, and you can’t go wrong.
Similar Posts