Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mroth/evalcache
:hatching_chick: zsh plugin to cache eval loads to improve shell startup time
https://github.com/mroth/evalcache
zsh zsh-plugin
Last synced: about 4 hours ago
JSON representation
:hatching_chick: zsh plugin to cache eval loads to improve shell startup time
- Host: GitHub
- URL: https://github.com/mroth/evalcache
- Owner: mroth
- License: mit
- Created: 2017-04-12T20:12:39.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-09-06T12:33:14.000Z (over 1 year ago)
- Last Synced: 2024-12-18T11:07:05.052Z (8 days ago)
- Topics: zsh, zsh-plugin
- Language: Shell
- Homepage:
- Size: 18.6 KB
- Stars: 202
- Watchers: 5
- Forks: 10
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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 asks: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 for some reason that it'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
### [Antigen](https://github.com/zsh-users/antigen)
Add `antigen bundle mroth/evalcache` to your `.zshrc` with your other bundle commands.
Antigen will handle cloning the plugin for you automatically the next time you start zsh. You can also add the plugin to a running zsh with `antigen bundle mroth/evalcache` for testing before adding it to your `.zshrc`.
### [Fig](https://fig.io)
Fig adds apps, shortcuts, and autocomplete to your existing terminal.
Install `evalcache` in just one click.
### [Oh-My-Zsh](http://ohmyz.sh/)
1. Clone this repository into `$ZSH_CUSTOM/plugins` (by default `~/.oh-my-zsh/custom/plugins`)
```sh
git clone https://github.com/mroth/evalcache ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/evalcache
```2. Edit `~/.zshrc` to add _evalcache_ to your plugin list,
```diff
- plugins=(...)
+ plugins=(... evalcache)
```### [Zgen](https://github.com/tarjoilija/zgen)
Add `zgen load mroth/evalcache` to your `.zshrc` file in the same function you're doing your other `zgen load` calls in. Zgen will handle automatically cloning the plugin for you the next time you do a `zgen save`.