Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Evalcache
Commits
2b57a1f8
Commit
2b57a1f8
authored
Apr 12, 2017
by
Matthew Rothenberg
Browse files
import from mroth dotfiles repo
parents
Changes
2
Show whitespace changes
Inline
Side-by-side
README.md
0 → 100644
View file @
2b57a1f8
# 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 to
`true`
if you wish to bypass evalcache.
There is a convenience function to clear the cache called
`_evalcache_clear`
.
## Installation
TODO: installation instructions for OMZ, antigen, prezto etc
evalcache.plugin.zsh
0 → 100644
View file @
2b57a1f8
# Caches the output of a binary initialization command, to avoid the time to
# execute it in the future.
#
# Usage: _evalcache <command> <generation args...>
# default cache directory
export
ZSH_EVALCACHE_DIR
=
${
ZSH_EVALCACHE_DIR
:-
"
$HOME
/.zsh-evalcache"
}
function
_evalcache
()
{
local
cacheFile
=
"
$ZSH_EVALCACHE_DIR
/init-
$1
.sh"
if
[
"
$ZSH_EVALCACHE_DISABLE
"
=
"true"
]
;
then
eval
"
$(
"
$@
"
)
"
elif
[
-s
"
$cacheFile
"
]
;
then
source
"
$cacheFile
"
else
if
type
"
$1
"
>
/dev/null
;
then
(>
&2
echo
"
$1
initialization not cached, caching output of:
$*
"
)
mkdir
-p
"
$ZSH_EVALCACHE_DIR
"
"
$@
"
>
"
$cacheFile
"
source
"
$cacheFile
"
else
echo
"evalcache ERROR:
$1
is not installed or in PATH"
fi
fi
}
function
_evalcache_clear
()
{
rm
-i
"
$ZSH_EVALCACHE_DIR
"
/init-
*
.sh
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment