In previous blog posts, we talked about optimizations as they related to the Windows Operating System, including Active Setup, the Microsoft Store, Services and Scheduled Tasks, and more. Due to the number of items that can be optimized in each section, those blog posts were necessarily a little longer in length.
The focus of this blog series will be Application Optimizations. This article will cover the basics of how I attempt to optimize applications. All upcoming blog posts will provide more details about commonly used applications that stray outside of the basics discussed here. Since these blog posts will be centered around just one application or family of similar applications, they will be mostly shorter in nature, but will still provide you with useful information you can use to optimize your environment. While OS optimizations are pretty straightforward, optimizing applications is a bit of trial and error, as a developer can use any, or none, of the methods denoted in the OS Optimizations blog series within their application. Google Chrome, for instance, utilizes Active Setup, Services and Scheduled Tasks and so each of those pieces need to be identified, after which Chrome can be optimized (if desired). Meanwhile, Java Runtime Environment utilizes a Startup Item, as well as custom registry keys that need to be understood before utilization.
Please note that the optimizations provided in this blog are intended only as a guide. Be sure to test the optimizations described internally before pushing the changes to your production environment. With the above information understood, let me delve into what I look for when optimizing applications.
While Application Optimization starts post-install, I wanted to spend some time talking about installation options. Due to the prevalence of downloaded installation files, the installation process for applications as a whole has been drastically altered. Back in the day, when dinosaurs (like myself) roamed the Earth and CDs were still used to install applications, all application files were in one place. Now, applications are installed from downloaded files from the Internet.
Now, to allow those files to download quicker, the full application is not built into that download, just a header called an Online Installer, whose sole purpose is to go and download the full application before installing it for you. While this process is much easier for the basic home user, it actually prevents us as admins or architects from accomplishing the same level of granularity within the application as we may desire. Want to edit the installation files before the installation takes place so that the application installs according to your desire? Not really possible.
That's where either the Enterprise Bundle or an Offline Installer come into play, although I would prefer the former over the latter. The Enterprise Bundle, if it exists, will generally contain not just the Offline Installer, but also additional enterprise-level items that may help you in administering the application, such as policy files, additional installers, and enterprise-level documentation. The Offline Installer, on the other hand, is just the full application install, usually in a compressed file, that is used in lieu of the Online Installer. In my opinion, either of the above options is better than the Online Installer, when it comes to management of applications.
Post-installation of an application is where we will start to follow the guidelines and thought processes I outlined in my OS Optimizations Essentials blog series. We will be tackling each section more below. Each section below will follow the same basic path:
- Identify any possible items used by the installed applications.
- Discover the purpose of found items.
- Decide whether these items are necessary for the application to function as you desire within your environment. If they are necessary, leave them alone. If they are not, optimize them.
- Implement your decision.
Many applications nowadays will create services or scheduled tasks with the sole purpose of keeping the application up to date. While that purpose is a great idea for a home user, it may not be a good idea for an enterprise requiring strict application control. Following the information denoted in Part 3 of the Windows OS Optimization Essentials blog, the purpose here is to identify, discover, decide, and implement whether any services or scheduled tasks are created by the application in question.
Generally, but not always, services and scheduled tasks will contain the name of the application, as with Google and Adobe, but sometimes that name will be obfuscated, requiring a deeper knowledge of the application itself. Optimizing Services and Scheduled Tasks can benefit both from a resource utilization standpoint as well as user experience, so identifying and optimizing these items provide great value to your environment.
Startup Items, such as Run or RunOnce registry items, are commonly used devices by developers to force applications to run or self-configure on machine start up or user logon. While some of these are generally necessary, such as security software, others may be more of an annoyance and something you wish to optimize. As such, following Part 4 of the Windows OS Optimization Essentials blog, Startup Items are even more on you to identify and determine the use case for each, as they are generally application specific. Optimizing Startup Items provide sometimes profound user experience as optimizing them reduces resource utilization when the user sees the desktop, increasing user experience as they are able to open applications they want rather than applications that want to open.
Active Setup isn't something that is commonly used by developers outside of Microsoft, but usage of Active Setup is catching on more and more recently as a way to provide per user customizations of an application when the application is installed in a per-machine context. Again, following the information denoted in Part 1 of the Windows OS Optimization Essentials blog, we are again attempting to identify any Active Setup items that can potentially be optimized and optimizing as decided.
Once identified and decided, optimizing any Active Setup items will directly contrast to the logon times for your end users.
Universal Windows Platform Applications, AKA UWP Apps, AKA Appx Packages, were only relatively recently developed, back with Windows 8.1, and are therefore not very often used in an application context, but they are more and more starting to be used by developers and are therefore worth investigating.
As per Part 2 of the Windows OS Optimization Essentials blog, UWP Items come in two different flavors, provisioned and installed. Identifying and potentially optimizing each is a determination that would need to be made. UWP Applications, if provisioned, will increase first time user logon as they are copied over and installed. Installed UWP Applications, on the other hand, will not increase the logon time but will increase resource utilization and, if not desired, make for great optimization fodder.
So now that we have covered the basics of what I look for when attempting to optimize applications, the next blog will do a deeper dive into Google Chrome, one of the most commonly used browser applications, and what you should be on the lookout for, including, and extending past, the above.
As always, any information provided in this guide are recommendations only and should be vetted against your environment before implementing in a production scenario.
If you need assistance in optimizing your VDI or DaaS images, check out our Nutanix Xpert Services Template Image Creation and Optimization service.
Need help with your Frame deployment, have an idea for a new use case, or just want to learn more about Frame?
Email us at firstname.lastname@example.org and one of our experts will reach out!