主要观点:受 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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。