How To Prevent Startup Processes from Slowing OSX Login
Dropbox is a wonderful utility. But.....it's a big fat resource hog for about a minute after you login to OSX for the first time after a restart. The larger your dropbox folder, the worse it gets.
A solution I discovered last night is to launch startup processes through AppleScript, instead of having the system launch them automatically.
Step 1 - Create A Startup Apps Script
Use the AppleScript editor to create a new script. The contents of mine are below. Obviously you'll replace the application names with the applications that you currently want launched at startup. Notice that Dropbox is dead last on this list. The script launches the applications - in the background - with a delay in between.
do shell script"open -ga 'Alfred 2'" delay 10 do shell script "open -ga 'Fantastical'" delay 10 do shell script "open -ga 'TextExpander'" delay 10 do shell script "open -ga 'Path Finder'" delay 10 do shell script "open -ga 'TextExpander'" delay 10 do shell script "open -ga 'Dropbox'" delay 10
The application name in the script must match the name of the corresponding .app file in the Applications folder. For an app like 1Password, where a helper app is launched that actually lives inside the main app, this won't work.
Dropbox is a great candidate because it launches in a very straightforward way - just the main Dropbox application.
Step 2 - The App
Save the AppleScript script as an Application into the Applications folder, I called mine StartupApps.
Step 3 - Set App Preferences
Next, check all your apps that launch at startup for a "Launch at Startup" preference, and uncheck it.
If the application has a "helper" application, this preference may be worded as "Keep ____ helper running after application quits".
Basically, you don't want any of these apps telling the system to do anything when a restart happens.
Step 4 - Remove Launch Daemons
Here's where it gets a bit nerdy, but without this step the whole process is pointless. In the Finder, click Go -> Go To Folder and type
~/Library/LaunchAgents/
You'll se a list of plist files in there, some of them will match applications that you've put into your startup script. Drag those files to your desktop - we don't want to delete them just yet in case something goes wrong.
Repeat this process for
/Library/LaunchAgents/
/Library/LaunchDaemons/
/Library/StartupItems/
Again - only do this for plist files corresponding to Apps in your startup script, and only do this for applications that are being launched directly from the Applications folder, not some helper application inside the main application.
Step 5 - Set Login Items
Go to the System Preferences -> Users and find your name in the account list. Go to the "Login Items" tab. Remove any items that match the items in your script. Add a new item that links to your new StartupApps app.
Step 6 - Restart
Now, restart your computer, login and wait for the applications to load one at a time. If there's an error, you'll probably see an error message about "Connection is invalid". I first saw this error because I was trying to launch an application from the script, but there was a LaunchAgent that had already started it.
The Results
My results were extremely good. Since Alfred launches first, I'm able to launch Chrome, my Mail program and begin working while the other apps launch one at a time. If you find that the apps are still overlapping in startup, you can increase the delays in the script. Just open the StartupApps app in the AppleScript editor, edit and re-save.
Here's to more product restarts.