主要观点:受 Tavis 博客启发,记录减少终端(ZSH)启动滞后的历程,展示 Nix 的强大,对比不同系统(NixOS 笔记本、MacBook Pro、Chromebook Duet 3)的启动时间,找出 ZSH 启动慢的原因并优化。
关键信息:
- 300ms 左右启动时间不太在意,500ms+开始注意到启动滞后,NixOS 系统本身启动时间无问题,Chromebook 启动时间很差,冷启动数秒,热启动 600ms+。
- 使用
time zsh -ci exit
和hyperfine
可检查 ZSH 启动时间,-i
标志用于交互式使用 ZSH。 zprof
可用于分析 ZSH 启动时花费时间的部分,发现zim-completion
和zim-ssh
模块启动较慢,zim-ssh
代码可优化。- 自己编写代码基于
Oh-My-Zsh ssh-agent plugin
优化zim-ssh
,使 ZSH 启动时间减少,zprof
显示zim-completion
仍是主要因素。 - 启动
fzf
等程序会影响 ZSH 启动,使用 Nix 的pkgs.runCommand
预生成这些命令的输出可改善,如any-nix-shell
等,还切换到zsh-fast-syntax-highlighting
提高启动速度。
重要细节: - 在 NixOS 笔记本上,优化前
hyperfine "zsh -ic exit"
为 218.6ms,优化后为 138.3ms,减少约 36%;在 Chromebook 上,优化前为 679.7ms,优化后为 278.2ms,减少约 59%。 zim-completion
启动慢是因为要决定是否重新编译补全,替换可能更糟所以暂不处理。any-nix-shell
用 shell 脚本编写,启动时间约 16ms,fzf
冷启动约 6.8ms 可能可察觉,热启动约 2.9ms 较难察觉。- 通过
pkgs.runCommand
预生成fzf
、zoxide
、direnv
的 ZSH 集成代码可改善启动时间。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。