
Opening up a new shell was annoyingly slow. Not terrible, but enough to notice. Its a niggle.
I wanted to find out which components were causing the most delay, so I used
time to measure how long it took to launch a shell. Even though shells
might appear to be part of the low level 'guts' of a computer, each shell is
just an executable and can be treated as such.
To measure the startup speed of your shell, do:
for i in $(seq 1 10); do /usr/bin/time $SHELL -i -c exit; done

This shows that it takes 0.84 seconds to start zsh - not terrible, but not
great:
You can compare the performance of different shells by replacing $SHELL with
zsh, bash, fish etc.
Here are the results if I used BASH instead of zsh - 9.3x faster! (but
without useful tools and plugins):

Now that I can measure how long it takes to start, it would be useful to know
which proccesses are causing the greatest delays. This could be done with
something like zsh -xv which enables verbose output and xtrace. This creates
a tonne of output, but doesnt inlcude timestamps. All I really want is
a summary of how much time each subproccess required to run, i.e. an order blind profiler.
Add zmodload zsh/zprof at the start of .zshrc and zprof at the very end.
Now when I start zsh I see the following:

Next steps - make virtualenvwrapper run faster, or asyncronously, or not at all...
Update:
virtualenvwrapper is the biggest cause of slow loading. Using the lazy
loading option decreased loading time by 0.3s
