Coder Social home page Coder Social logo

evalcache's Introduction

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

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.

  1. Clone this repository into $ZSH_CUSTOM/plugins (by default ~/.oh-my-zsh/custom/plugins)

    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,

    - plugins=(...)
    + plugins=(... evalcache)

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.

evalcache's People

Contributors

brkn avatar inthesmall avatar mroth avatar rkt2spc avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.