ZSH 滞后及与 Nix 的解决方案 —— kokada

主要观点:受 Tavis 博客启发,记录减少终端(ZSH)启动滞后的历程,展示 Nix 的强大,对比不同系统(NixOS 笔记本、MacBook Pro、Chromebook Duet 3)的启动时间,找出 ZSH 启动慢的原因并优化。
关键信息

  • 300ms 左右启动时间不太在意,500ms+开始注意到启动滞后,NixOS 系统本身启动时间无问题,Chromebook 启动时间很差,冷启动数秒,热启动 600ms+。
  • 使用time zsh -ci exithyperfine可检查 ZSH 启动时间,-i标志用于交互式使用 ZSH。
  • zprof可用于分析 ZSH 启动时花费时间的部分,发现zim-completionzim-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预生成fzfzoxidedirenv的 ZSH 集成代码可改善启动时间。
阅读 11
0 条评论