本文发布于:2024-11-22,最后更新于:2025-02-22,如果内容失效请留言告知。
不知道从什么时候开始,macbook 里打开 iterm2 的初始化启动时间变得非常慢。由于通过 brew
安装一个软件时会自动执行 brew update
,初始估计是某个应用被更新后新的版本导致的,但是无法确定具体导致该问题的原因在哪儿。
1 通过启用 zsh/zprof
模块分析 shell 启动耗时详情
从 macOS Catalina 版开始,系统使用的默认 shell 是 zsh。zsh 有一个性能监控模块 zsh/zprof,启用了它后,可以输出 shell 启动过程中所有函数的调用时间。
编辑 ~/.zshrc
文件,在最前面加上:
1 | zmodload zsh/zprof |
在该文件的末尾加上:
1 | zprof |
然后新开一个 shell 终端,则会在启动完成后打印出类似如下信息:
1 2 3 4 5 6 | Last login: Sat Feb 22 10:07:47 on ttys005 You have new mail. num calls time self name ----------------------------------------------------------------------------------- 1) 1 1252.28 752.28 59.80% 376.78 376.78 29.95% nvm_auto 2) 2 875.49 187.75 29.85% 228.86 114.43 18.19% nvm |
如此就可以知道问题出在哪里了,然后在 ~/.zshrc
、~/.bash_profile
等文件中查找相关关键词并针对性优化处理即可。在问题解决后,可以注释上述修改,以避免每次启动终端都会打印这类信息。
2 解决案例参考:使用 fnm 替换 nvm
我这里可以很明显看到,是因为 nvm 初始化执行的时间过久。我选择的方法是使用 fnm 替换 nvm。
首先是移除 nvm。编辑 ~/.bash_profile
文件,找到安装配置 nvm 时添加的如下内容并移除:
1 2 3 | export NVM_DIR= "$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion |
接着执行如下命令直接删除 ~/.nvm
目录即可:
1 | /bin/rm -rf ~/.nvm |
如果是通过 homebrew 安装的 nvm,可以执行如下命令删除:
1 | brew uninstall nvm |
最后使用 brew 安装 fnm
。执行如下安装命令:
1 | brew install fnm |
编辑 ~/.bash_profile
文件,在末尾添加如下内容:
1 | eval "$(fnm env --multi)" |
让配置在当前终端立即生效:
1 2 3 4 5 6 7 8 | source ~/.bashrc # 查看远端 Node.js 版本 fnm ls -remote # 选择一个最新的稳定版本安装 fnm install v22.14.0 # 验证 node 版本 node - v |