Fuhui

Zsh启动优化


主要优化方法

  1. 偶尔执行一次的sh脚本,不要每次都执行,需要的时候再执行,举例:

     # 下面的配置保证每次打开终端的时候,都可以执行python虚拟环境的workon/mkvirtualenv/rmvirtualenv等命令
     # source /usr/local/bin/virtualenvwrapper.sh
     # source /Library/Frameworks/Python.framework/Versions/3.6/bin/virtualenvwrapper.sh
     # 修改为函数的形式,需要执行python虚拟环境命令的时候再执行这个函数
     start_virtualenvwrapper()
     {
       source /Library/Frameworks/Python.framework/Versions/3.6/bin/virtualenvwrapper.sh
     }
    
  2. 懒加载。有些命令需要的时候再加载,举例:k8s命令kubectl

     # lazy load begin
     if [ $commands[kubectl] ]; then
        
       # Placeholder 'kubectl' shell function:
       # Will only be executed on the first call to 'kubectl'
       kubectl() {
        
         # Remove this function, subsequent calls will execute 'kubectl' directly
         unfunction "$0"
        
         # Load auto-completion
         source <(kubectl completion zsh)
        
         # Execute 'kubectl' binary
         $0 "$@"
       }
     fi
     # lazy load end
    
  3. 把类似$(brew –prefix dvm)的命令直接修改为其执行后的路径值,因为这条命令执行比较耗时

  4. zsh的插件按需加载

     plugins=(git z node npm brew osx extract kubectl)
    

具体优化措施

参考zshrc 启动速度分析和优化这篇文章

  1. 计算启动时间

    • 真实的启动时间 time zsh -i -c exit

    • 不加载任何启动命令脚本的启动时间 time zsh –no-rcs -i -c exit

  2. 使用zshprof的时候,直接使用github上源码的说明,不要根据1里面的内容

  3. 参考文章2345


  1. zshrc 启动速度分析和优化 ↩︎

  2. zsh lazy loading ↩︎

  3. Speed up initial zsh startup with lazy-loading ↩︎

  4. zshprof ↩︎

  5. profiling zsh shell scripts ↩︎