evalcache
zsh plugin to cache the output of a binary initialization command, intended to help lower shell startup time.
What it does
There are lots of shell wrapper tools that follow the pattern of asking you to eval a specific init command in your shell startup, for example, rbenv ask
eval "$(hub alias -s)"
While this is very convenient, the reality is there is a small amount of overhead associated with shelling out to this, and the output is almost always actually static in all of the tools I know. So why bear this cost every time you open a new tab in your shell?
Instead, after you load this plugin, you can replace that same command with:
_evalcache hub alias -s
The first time this runs, it will cache the output of the command to a file, which will be sourced in the future instead when it exists.
If you update a tool and expect ifor some reason that t's initialization might have changed, you can simply clear the cache and it will be regenerated.
It also gracefully degrades to a no-op if the tool is no longer installed.
Benchmarks
Some informal benchmarks from my MacBook on my .zshrc:
command | without | first run | subsequent runs | savings |
---|---|---|---|---|
rbenv init | ~65ms | ~65ms | ~8ms | 88% |
hub alias | ~30ms | ~30ms | ~6ms | 80% |
scmpuff init | ~24ms | ~25ms | ~10ms | 58% |
The difference isn't huge, but can be handy in shaving down shell startup time, especially if you use a bunch of these tools. Every millisecond counts!
Options
$ZSH_EVALCACHE_DIR
: cache files storage, default$HOME/.zsh-evalcache
.$ZSH_EVALCACHE_DISABLE
: set totrue
if you wish to bypass evalcache.
There is a convenience function to clear the cache called _evalcache_clear
.