這個問題困擾我一陣子了,雖然 zsh 很好用(我都在 Mac 用 iTerm + oh-my-zsh),但是一直以來都有開啟緩慢的問題。由於我會使用 TextExpander 來加速常用的指令輸入,所以現在反而速度瓶頸在 zsh 的載入。往往每次要到某個專案下 git pull 更新,指令都打完按 Enter 了,zsh 卻還沒載入完畢。
經過了一些時間的研究之後,發現 zsh 本身載入其實沒有想像中的久,問題出在 .zshrc 裡面載入的東西在慢。而經過仔細測試之後,我發現是由於我裝了 nvm,而 zsh 每次都要載入一個 93KB 的 nvm.sh...導致非常花時間。(又是 Node.js 害的...)
解決方法:
如果你不是每次都要用 nvm 的話,可以讓 nvm 不要預設自動載入。在原本的 .zshrc 中,把載入 nvm.sh 的部分換成用 function 包起來。像是這樣:
1 2 3 4 |
function loadnvm (){ source $(brew --prefix nvm)/nvm.sh # 其他需要 nvm 才能正常用的東西也丟在這邊 } |
當需要用 nvm 時,在 terminal 輸入 loadnvm,再讓他載入就好了。
如果你固定用某個版本的 npm,而不需要常常用 nvm 切換版本,可以在 .zshrc 加入兩行指令
1 2 |
export NVM_DIR=~/.nvm export PATH="$NVM_DIR/v0.10.40/bin:$PATH" |
其中 v0.10.40 換成你自己用的版本,這樣的話預設會可以用 npm,但是不能用 nvm(仍然需要手動載入)
經測試,這樣改了之後 zsh 載入速度快了 1.5~2 秒...真的順很多,如果你有一樣的困擾可以試試看。當然其他東西也可以改成這樣手動載入的,如果你有其他東西成為 zsh 載入瓶頸的話,也可以用這個方法解決。
發佈留言