Closed27

シェルを爆速起動したい

ajfAfgajfAfg

動機

まっさらなシェルと比べて自分のシェルの起動が遅すぎて居た堪れない気持ちになった.

ゴール

シェルの起動時間が1秒以下となる.

前提

  • シェルは Zsh を使用している
  • Zsh のフレームワークとして Prezto を使用している

https://github.com/sorin-ionescu/prezto

ajfAfgajfAfg

真面目に計測したところでって感じがするので,10回分のシェル起動の時間を貼り付けるだけで終わらす.ざっと見た感じ,今は1.3秒くらい時間がかかってそう.

結果
$ for i in $(seq 1 10); do time zsh -i -c exit; done
Restored session: 20229月21日 水曜日 21時03分49秒 JST

Saving session...completed.
zsh -i -c exit  1.03s user 0.43s system 90% cpu 1.627 total
Restored session: 20229月21日 水曜日 21時06分58秒 JST

Saving session...completed.
zsh -i -c exit  0.99s user 0.38s system 104% cpu 1.314 total
Restored session: 20229月21日 水曜日 21時06分59秒 JST

Saving session...completed.
zsh -i -c exit  0.99s user 0.38s system 104% cpu 1.310 total
Restored session: 20229月21日 水曜日 21時07分01秒 JST

Saving session...completed.
zsh -i -c exit  0.99s user 0.37s system 104% cpu 1.305 total
Restored session: 20229月21日 水曜日 21時07分02秒 JST

Saving session...completed.
zsh -i -c exit  0.98s user 0.38s system 103% cpu 1.311 total
Restored session: 20229月21日 水曜日 21時07分03秒 JST

Saving session...completed.
zsh -i -c exit  0.99s user 0.38s system 104% cpu 1.310 total
Restored session: 20229月21日 水曜日 21時07分04秒 JST

Saving session...completed.
zsh -i -c exit  0.97s user 0.42s system 98% cpu 1.402 total
Restored session: 20229月21日 水曜日 21時07分06秒 JST

Saving session...completed.
zsh -i -c exit  1.01s user 0.40s system 104% cpu 1.345 total
Restored session: 20229月21日 水曜日 21時07分07秒 JST

Saving session...completed.
zsh -i -c exit  0.94s user 0.38s system 99% cpu 1.328 total
Restored session: 20229月21日 水曜日 21時07分09秒 JST

Saving session...completed.
zsh -i -c exit  1.01s user 0.39s system 104% cpu 1.343 total

環境

  • OS: macOS Monterey
  • CPU: 1.4 GHz Quad-Core Intel Core i5
  • Memory: 8 GB 2133 MHz LPDDR3
  • Terminal version: 2.12.5 (444)
ajfAfgajfAfg

https://qiita.com/vintersnow/items/7343b9bf60ea468a4180#プロファイル

↑をやった結果
Last login: Wed Sep 21 21:33:54 on ttys026
num  calls                time                       self            name
-----------------------------------------------------------------------------------
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    4         100.29    25.07   35.94%    100.29    25.07   35.94%  compaudit
 2)    5         187.04    37.41   67.02%     66.59    13.32   23.86%  pmodload
 3)    2         131.23    65.61   47.02%     30.94    15.47   11.09%  compinit
 4)    1          22.73    22.73    8.15%     22.60    22.60    8.10%  _zsh_highlight_load_highlighters
 5)    3          18.86     6.29    6.76%     18.86     6.29    6.76%  promptinit
 6)    1           8.49     8.49    3.04%      8.49     8.49    3.04%  prompt_pure_state_setup
 7)   15           6.25     0.42    2.24%      6.25     0.42    2.24%  (anon)
 8)    1           5.83     5.83    2.09%      5.83     5.83    2.09%  _zsh_highlight_bind_widgets
 9)   23           4.90     0.21    1.76%      4.90     0.21    1.76%  add-zsh-hook
10)    2           4.63     2.31    1.66%      4.63     2.31    1.66%  async_init
11)    2          12.67     6.34    4.54%      3.47     1.73    1.24%  prompt_pure_setup
12)    3           1.64     0.55    0.59%      1.64     0.55    0.59%  is-at-least
13)    3           6.03     2.01    2.16%      1.41     0.47    0.50%  async
14)    1           1.00     1.00    0.36%      1.00     1.00    0.36%  bashcompinit
15)    2           7.25     3.62    2.60%      0.99     0.49    0.35%  prompt_sorin_setup
16)    3           0.47     0.16    0.17%      0.40     0.13    0.14%  add-zle-hook-widget
17)    2          21.13    10.56    7.57%      0.37     0.18    0.13%  set_prompt
18)    2          21.33    10.66    7.64%      0.20     0.10    0.07%  prompt
19)    1           0.10     0.10    0.03%      0.10     0.10    0.03%  compdef
20)    1           0.17     0.17    0.06%      0.07     0.07    0.03%  complete
21)    1           0.03     0.03    0.01%      0.03     0.03    0.01%  is-callable
22)    2           0.02     0.01    0.01%      0.02     0.01    0.01%  is-darwin

-----------------------------------------------------------------------------------

       3/5         1.78     0.59    0.64%      1.09     0.36             pmodload [2]
       1/5         0.07     0.07    0.02%      0.07     0.07             prompt_sorin_setup [15]
 2)    5         187.04    37.41   67.02%     66.59    13.32   23.86%  pmodload
       2/2         0.02     0.01    0.01%      0.02     0.01             is-darwin [22]
       1/1         0.03     0.03    0.01%      0.03     0.03             is-callable [21]
       2/3         0.23     0.12    0.08%      0.23     0.12             is-at-least [12]
       4/23        0.52     0.13    0.19%      0.52     0.13             add-zsh-hook [9]
       3/5         1.78     0.59    0.64%      1.09     0.36             pmodload [2]
       1/1         5.83     5.83    2.09%      5.83     5.83             _zsh_highlight_bind_widgets [8]
      14/15        6.18     0.44    2.21%      6.18     0.44             (anon) [7]
       1/2         7.98     7.98    2.86%      0.13     0.13             prompt [18]
       1/3        11.33    11.33    4.06%      1.28     1.28             promptinit [5]
       1/1        22.73    22.73    8.15%     22.60    22.60             _zsh_highlight_load_highlighters [4]
       1/2        65.67    65.67   23.53%      9.32     9.32             compinit [3]

-----------------------------------------------------------------------------------

       1/2        65.67    65.67   23.53%      9.32     9.32             pmodload [2]
 3)    2         131.23    65.61   47.02%     30.94    15.47   11.09%  compinit
       2/4       100.29    50.14   35.94%      1.48     0.74             compaudit [1]

-----------------------------------------------------------------------------------

       2/4       100.29    50.14   35.94%      1.48     0.74             compinit [3]
       2/4        98.81    49.40   35.41%     98.81    49.40             compaudit [1]
 1)    4         100.29    25.07   35.94%    100.29    25.07   35.94%  compaudit
       2/4        98.81    49.40   35.41%     98.81    49.40             compaudit [1]

-----------------------------------------------------------------------------------

       1/1        22.73    22.73    8.15%     22.60    22.60             pmodload [2]
 4)    1          22.73    22.73    8.15%     22.60    22.60    8.10%  _zsh_highlight_load_highlighters
       1/23        0.13     0.13    0.05%      0.13     0.13             add-zsh-hook [9]

-----------------------------------------------------------------------------------

       1/2         7.98     7.98    2.86%      0.13     0.13             pmodload [2]
18)    2          21.33    10.66    7.64%      0.20     0.10    0.07%  prompt
       2/2        21.13    10.56    7.57%      0.37     0.18             set_prompt [17]

-----------------------------------------------------------------------------------

       2/2        21.13    10.56    7.57%      0.37     0.18             prompt [18]
17)    2          21.13    10.56    7.57%      0.37     0.18    0.13%  set_prompt
      12/23        0.84     0.07    0.30%      0.84     0.07             add-zsh-hook [9]
       1/2         7.25     7.25    2.60%      0.79     0.79             prompt_sorin_setup [15]
       1/2        12.67    12.67    4.54%      2.15     2.15             prompt_pure_setup [11]

-----------------------------------------------------------------------------------

       1/3        11.33    11.33    4.06%      1.28     1.28             pmodload [2]
       1/3        10.04    10.04    3.60%     10.04    10.04             promptinit [5]
 5)    3          18.86     6.29    6.76%     18.86     6.29    6.76%  promptinit
       1/3        10.04    10.04    3.60%     10.04    10.04             promptinit [5]

-----------------------------------------------------------------------------------

       1/2        12.67    12.67    4.54%      2.15     2.15             set_prompt [17]
       1/2        10.52    10.52    3.77%      1.31     1.31             prompt_pure_setup [11]
11)    2          12.67     6.34    4.54%      3.47     1.73    1.24%  prompt_pure_setup
       1/3         0.02     0.02    0.01%      0.01     0.01             async [13]
       2/23        0.22     0.11    0.08%      0.22     0.11             add-zsh-hook [9]
       2/3         0.47     0.24    0.17%      0.22     0.11             add-zle-hook-widget [16]
       1/1         8.49     8.49    3.04%      8.49     8.49             prompt_pure_state_setup [6]
       1/2        10.52    10.52    3.77%      1.31     1.31             prompt_pure_setup [11]

-----------------------------------------------------------------------------------

       1/1         8.49     8.49    3.04%      8.49     8.49             prompt_pure_setup [11]
 6)    1           8.49     8.49    3.04%      8.49     8.49    3.04%  prompt_pure_state_setup

-----------------------------------------------------------------------------------

       1/2         7.25     7.25    2.60%      0.79     0.79             set_prompt [17]
       1/2         6.40     6.40    2.29%      0.20     0.20             prompt_sorin_setup [15]
15)    2           7.25     3.62    2.60%      0.99     0.49    0.35%  prompt_sorin_setup
       1/5         0.07     0.07    0.02%      0.07     0.07             pmodload [2]
       1/23        0.19     0.19    0.07%      0.19     0.19             add-zsh-hook [9]
       1/3         6.01     6.01    2.15%      1.35     1.35             async [13]
       1/2         6.40     6.40    2.29%      0.20     0.20             prompt_sorin_setup [15]

-----------------------------------------------------------------------------------

      14/15        6.18     0.44    2.21%      6.18     0.44             pmodload [2]
       1/15        0.07     0.07    0.03%      0.07     0.07             add-zle-hook-widget [16]
 7)   15           6.25     0.42    2.24%      6.25     0.42    2.24%  (anon)

-----------------------------------------------------------------------------------

       1/3         6.01     6.01    2.15%      1.35     1.35             prompt_sorin_setup [15]
       1/3         4.66     4.66    1.67%      0.04     0.04             async [13]
       1/3         0.02     0.02    0.01%      0.01     0.01             prompt_pure_setup [11]
13)    3           6.03     2.01    2.16%      1.41     0.47    0.50%  async
       2/2         4.63     2.31    1.66%      4.63     2.31             async_init [10]
       1/3         4.66     4.66    1.67%      0.04     0.04             async [13]

-----------------------------------------------------------------------------------

       1/1         5.83     5.83    2.09%      5.83     5.83             pmodload [2]
 8)    1           5.83     5.83    2.09%      5.83     5.83    2.09%  _zsh_highlight_bind_widgets

-----------------------------------------------------------------------------------

      12/23        0.84     0.07    0.30%      0.84     0.07             set_prompt [17]
       4/23        0.52     0.13    0.19%      0.52     0.13             pmodload [2]
       2/23        0.22     0.11    0.08%      0.22     0.11             prompt_pure_setup [11]
       1/23        0.19     0.19    0.07%      0.19     0.19             prompt_sorin_setup [15]
       1/23        0.13     0.13    0.05%      0.13     0.13             _zsh_highlight_load_highlighters [4]
 9)   23           4.90     0.21    1.76%      4.90     0.21    1.76%  add-zsh-hook

-----------------------------------------------------------------------------------

       2/2         4.63     2.31    1.66%      4.63     2.31             async [13]
10)    2           4.63     2.31    1.66%      4.63     2.31    1.66%  async_init

-----------------------------------------------------------------------------------

       2/3         0.23     0.12    0.08%      0.23     0.12             pmodload [2]
12)    3           1.64     0.55    0.59%      1.64     0.55    0.59%  is-at-least

-----------------------------------------------------------------------------------

14)    1           1.00     1.00    0.36%      1.00     1.00    0.36%  bashcompinit

-----------------------------------------------------------------------------------

       2/3         0.47     0.24    0.17%      0.22     0.11             prompt_pure_setup [11]
       1/3         0.18     0.18    0.07%      0.18     0.18             add-zle-hook-widget [16]
16)    3           0.47     0.16    0.17%      0.40     0.13    0.14%  add-zle-hook-widget
       1/15        0.07     0.07    0.03%      0.07     0.07             (anon) [7]
       1/3         0.18     0.18    0.07%      0.18     0.18             add-zle-hook-widget [16]

-----------------------------------------------------------------------------------

20)    1           0.17     0.17    0.06%      0.07     0.07    0.03%  complete
       1/1         0.10     0.10    0.03%      0.10     0.10             compdef [19]

-----------------------------------------------------------------------------------

       1/1         0.10     0.10    0.03%      0.10     0.10             complete [20]
19)    1           0.10     0.10    0.03%      0.10     0.10    0.03%  compdef

-----------------------------------------------------------------------------------

       1/1         0.03     0.03    0.01%      0.03     0.03             pmodload [2]
21)    1           0.03     0.03    0.01%      0.03     0.03    0.01%  is-callable

-----------------------------------------------------------------------------------

       2/2         0.02     0.01    0.01%      0.02     0.01             pmodload [2]
22)    2           0.02     0.01    0.01%      0.02     0.01    0.01%  is-darwin

ajfAfgajfAfg

zprof の結果の読み方

At the top there is a summary listing all functions that were called at least once. This summary is sorted in decreasing order of the amount of time spent in each. The lines contain the number of the function in order, which is used in other parts of the list in suffixes of the form ‘[num]’, then the number of calls made to the function. The next three columns list the time in milliseconds spent in the function and its descendants, the average time in milliseconds spent in the function and its descendants per call and the percentage of time spent in all shell functions used in this function and its descendants. The following three columns give the same information, but counting only the time spent in the function itself. The final column shows the name of the function.

https://zsh.sourceforge.io/Doc/Release/Zsh-Modules.html#The-zsh_002fzprof-Module

ajfAfgajfAfg

とりあえず一番時間がかかってる compaudit をなんとかする.

ajfAfgajfAfg

そもそも compaudit は何者か調べようと以下の方法を試したけど全然ヒットしない.江戸川コナンの正体は工藤新一なのに(?)

  • "zsh compaudit" で検索
  • man compaudit
  • compaudit --help
  • compaudit -h
ajfAfgajfAfg

pmodload も同様だったので compinit をやる.こいつの対処は先人の知見が溜まってそうで助かる.

ajfAfgajfAfg

.zshrc に存在していた以下の記述をコメントアウトしたら compinit の呼び出し回数が1回になったが,その1回がどこに存在するのかよくわからなかった.grep をかけた感じこいつが怪しいけどホントかどうかまだわからん.

autoload -Uz compinit
compinit
ajfAfgajfAfg
現在の起動時間
for i in $(seq 1 10); do time zsh -i -c exit; done
Restored session: 20229月21日 水曜日 22時40分47秒 JST

Saving session...completed.
zsh -i -c exit  0.99s user 0.37s system 102% cpu 1.324 total
Restored session: 20229月21日 水曜日 22時41分08秒 JST

Saving session...completed.
zsh -i -c exit  0.95s user 0.35s system 104% cpu 1.245 total
Restored session: 20229月21日 水曜日 22時41分10秒 JST

Saving session...completed.
zsh -i -c exit  0.97s user 0.36s system 63% cpu 2.098 total
Restored session: 20229月21日 水曜日 22時41分12秒 JST

Saving session...completed.
zsh -i -c exit  0.92s user 0.36s system 102% cpu 1.248 total
Restored session: 20229月21日 水曜日 22時41分13秒 JST

Saving session...completed.
zsh -i -c exit  0.96s user 0.36s system 105% cpu 1.247 total
Restored session: 20229月21日 水曜日 22時41分14秒 JST

Saving session...completed.
zsh -i -c exit  0.93s user 0.35s system 102% cpu 1.245 total
Restored session: 20229月21日 水曜日 22時41分15秒 JST

Saving session...completed.
zsh -i -c exit  0.97s user 0.37s system 106% cpu 1.257 total
Restored session: 20229月21日 水曜日 22時41分17秒 JST

Saving session...completed.
zsh -i -c exit  0.96s user 0.36s system 105% cpu 1.258 total
Restored session: 20229月21日 水曜日 22時41分18秒 JST

Saving session...completed.
zsh -i -c exit  0.97s user 0.36s system 105% cpu 1.252 total
Restored session: 20229月21日 水曜日 22時41分19秒 JST

Saving session...completed.
zsh -i -c exit  0.98s user 0.37s system 105% cpu 1.276 total

0.1秒ほど早くなってそう(平均を求めてた方がわかりやすかったと若干後悔)

ajfAfgajfAfg
 #!/usr/bin/env zsh
 N=${1:-10}
 SUM=0
 for n in {1..$N}; do
   echo Running zsh $n
   (time zsh -i -c exit) 2>&1 | awk '{print $11}' | read ttl
   SUM=$(echo "${SUM} + ${ttl}" | bc)
 done
 echo
 AVG=$(echo "scale=3; ${SUM}/${N}" | bc)
 echo "Average: ${AVG}"

↑が動かない.変数 ttl に数が代入されていないために bc でパースエラーになっているっぽい.

ajfAfgajfAfg
echo 1 | read vecho "2 + $v" | bc
3

↑は動く.????????????????????????

ajfAfgajfAfg

awk コマンドの結果にありえん数の改行文字が含まれていたので全消ししたら動いた.

ajfAfgajfAfg

最終形態

#!/bin/zsh

N=${1:-10}
SUM=0
for n in {1..$N}; do
    echo Running zsh $n
    (time zsh -i -c exit) 2>&1 | awk '{print $11}' | tr -d '\n' | read ttl
    SUM=$(echo "${SUM} + ${ttl}" | bc)
done
echo
AVG=$(echo "scale=3; ${SUM}/${N}" | bc)
echo "Average: ${AVG}"
ajfAfgajfAfg

↑のプログラムで計測したところ,現在のシェルの起動時間は1.261秒だった.

ajfAfgajfAfg
現在のプロファイル
Last login: Wed Sep 21 22:46:20 on ttys028
num  calls                time                       self            name
-----------------------------------------------------------------------------------
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    5         142.53    28.51   86.36%     47.54     9.51   28.81%  pmodload
 2)    2          41.84    20.92   25.35%     41.84    20.92   25.35%  compaudit
 3)    3          19.23     6.41   11.65%     19.23     6.41   11.65%  promptinit
 4)    1          12.74    12.74    7.72%     12.62    12.62    7.64%  _zsh_highlight_load_highlighters
 5)    1           8.10     8.10    4.91%      8.10     8.10    4.91%  prompt_pure_state_setup
 6)   15           7.81     0.52    4.73%      7.81     0.52    4.73%  (anon)
 7)    1          47.69    47.69   28.90%      5.85     5.85    3.55%  compinit
 8)    2           5.74     2.87    3.48%      5.74     2.87    3.48%  async_init
 9)    1           5.54     5.54    3.36%      5.54     5.54    3.36%  _zsh_highlight_bind_widgets
10)   23           3.62     0.16    2.20%      3.62     0.16    2.20%  add-zsh-hook
11)    2          11.06     5.53    6.70%      2.30     1.15    1.39%  prompt_pure_setup
12)    3           1.04     0.35    0.63%      1.04     0.35    0.63%  is-at-least
13)    1           0.94     0.94    0.57%      0.94     0.94    0.57%  bashcompinit
14)    3           6.68     2.23    4.05%      0.94     0.31    0.57%  async
15)    2           7.69     3.84    4.66%      0.74     0.37    0.45%  prompt_sorin_setup
16)    3           0.47     0.16    0.28%      0.41     0.14    0.25%  add-zle-hook-widget
17)    2          19.93     9.96   12.07%      0.36     0.18    0.22%  set_prompt
18)    2          20.13    10.07   12.20%      0.21     0.10    0.13%  prompt
19)    1           0.10     0.10    0.06%      0.10     0.10    0.06%  compdef
20)    1           0.17     0.17    0.10%      0.08     0.08    0.05%  complete
21)    1           0.03     0.03    0.02%      0.03     0.03    0.02%  is-callable
22)    2           0.01     0.01    0.01%      0.01     0.01    0.01%  is-darwin

-----------------------------------------------------------------------------------

       3/5         1.46     0.49    0.89%      0.74     0.25             pmodload [1]
       1/5         0.07     0.07    0.04%      0.07     0.07             prompt_sorin_setup [15]
 1)    5         142.53    28.51   86.36%     47.54     9.51   28.81%  pmodload
       2/2         0.01     0.01    0.01%      0.01     0.01             is-darwin [22]
       1/1         0.03     0.03    0.02%      0.03     0.03             is-callable [21]
       2/3         0.23     0.11    0.14%      0.23     0.11             is-at-least [12]
       4/23        0.41     0.10    0.25%      0.41     0.10             add-zsh-hook [10]
       3/5         1.46     0.49    0.89%      0.74     0.25             pmodload [1]
       1/1         5.54     5.54    3.36%      5.54     5.54             _zsh_highlight_bind_widgets [9]
      14/15        7.75     0.55    4.69%      7.75     0.55             (anon) [6]
       1/2         8.45     8.45    5.12%      0.15     0.15             prompt [18]
       1/3        12.20    12.20    7.39%      0.78     0.78             promptinit [3]
       1/1        12.74    12.74    7.72%     12.62    12.62             _zsh_highlight_load_highlighters [4]
       1/1        47.69    47.69   28.90%      5.85     5.85             compinit [7]

-----------------------------------------------------------------------------------

       1/1        47.69    47.69   28.90%      5.85     5.85             pmodload [1]
 7)    1          47.69    47.69   28.90%      5.85     5.85    3.55%  compinit
       1/2        41.84    41.84   25.35%      0.50     0.50             compaudit [2]

-----------------------------------------------------------------------------------

       1/2        41.84    41.84   25.35%      0.50     0.50             compinit [7]
       1/2        41.34    41.34   25.05%     41.34    41.34             compaudit [2]
 2)    2          41.84    20.92   25.35%     41.84    20.92   25.35%  compaudit
       1/2        41.34    41.34   25.05%     41.34    41.34             compaudit [2]

-----------------------------------------------------------------------------------

       1/2         8.45     8.45    5.12%      0.15     0.15             pmodload [1]
18)    2          20.13    10.07   12.20%      0.21     0.10    0.13%  prompt
       2/2        19.93     9.96   12.07%      0.36     0.18             set_prompt [17]

-----------------------------------------------------------------------------------

       2/2        19.93     9.96   12.07%      0.36     0.18             prompt [18]
17)    2          19.93     9.96   12.07%      0.36     0.18    0.22%  set_prompt
      12/23        0.82     0.07    0.50%      0.82     0.07             add-zsh-hook [10]
       1/2         7.69     7.69    4.66%      0.50     0.50             prompt_sorin_setup [15]
       1/2        11.06    11.06    6.70%      1.42     1.42             prompt_pure_setup [11]

-----------------------------------------------------------------------------------

       1/3        12.20    12.20    7.39%      0.78     0.78             pmodload [1]
       1/3        11.42    11.42    6.92%     11.42    11.42             promptinit [3]
 3)    3          19.23     6.41   11.65%     19.23     6.41   11.65%  promptinit
       1/3        11.42    11.42    6.92%     11.42    11.42             promptinit [3]

-----------------------------------------------------------------------------------

       1/1        12.74    12.74    7.72%     12.62    12.62             pmodload [1]
 4)    1          12.74    12.74    7.72%     12.62    12.62    7.64%  _zsh_highlight_load_highlighters
       1/23        0.13     0.13    0.08%      0.13     0.13             add-zsh-hook [10]

-----------------------------------------------------------------------------------

       1/2        11.06    11.06    6.70%      1.42     1.42             set_prompt [17]
       1/2         9.63     9.63    5.84%      0.88     0.88             prompt_pure_setup [11]
11)    2          11.06     5.53    6.70%      2.30     1.15    1.39%  prompt_pure_setup
       1/3         0.02     0.02    0.01%      0.01     0.01             async [14]
       2/23        0.17     0.08    0.10%      0.17     0.08             add-zsh-hook [10]
       2/3         0.47     0.23    0.28%      0.23     0.11             add-zle-hook-widget [16]
       1/1         8.10     8.10    4.91%      8.10     8.10             prompt_pure_state_setup [5]
       1/2         9.63     9.63    5.84%      0.88     0.88             prompt_pure_setup [11]

-----------------------------------------------------------------------------------

       1/1         8.10     8.10    4.91%      8.10     8.10             prompt_pure_setup [11]
 5)    1           8.10     8.10    4.91%      8.10     8.10    4.91%  prompt_pure_state_setup

-----------------------------------------------------------------------------------

      14/15        7.75     0.55    4.69%      7.75     0.55             pmodload [1]
       1/15        0.06     0.06    0.04%      0.06     0.06             add-zle-hook-widget [16]
 6)   15           7.81     0.52    4.73%      7.81     0.52    4.73%  (anon)

-----------------------------------------------------------------------------------

       1/2         7.69     7.69    4.66%      0.50     0.50             set_prompt [17]
       1/2         7.12     7.12    4.31%      0.24     0.24             prompt_sorin_setup [15]
15)    2           7.69     3.84    4.66%      0.74     0.37    0.45%  prompt_sorin_setup
       1/5         0.07     0.07    0.04%      0.07     0.07             pmodload [1]
       1/23        0.22     0.22    0.13%      0.22     0.22             add-zsh-hook [10]
       1/3         6.66     6.66    4.04%      0.89     0.89             async [14]
       1/2         7.12     7.12    4.31%      0.24     0.24             prompt_sorin_setup [15]

-----------------------------------------------------------------------------------

       1/3         6.66     6.66    4.04%      0.89     0.89             prompt_sorin_setup [15]
       1/3         5.77     5.77    3.50%      0.04     0.04             async [14]
       1/3         0.02     0.02    0.01%      0.01     0.01             prompt_pure_setup [11]
14)    3           6.68     2.23    4.05%      0.94     0.31    0.57%  async
       2/2         5.74     2.87    3.48%      5.74     2.87             async_init [8]
       1/3         5.77     5.77    3.50%      0.04     0.04             async [14]

-----------------------------------------------------------------------------------

       2/2         5.74     2.87    3.48%      5.74     2.87             async [14]
 8)    2           5.74     2.87    3.48%      5.74     2.87    3.48%  async_init

-----------------------------------------------------------------------------------

       1/1         5.54     5.54    3.36%      5.54     5.54             pmodload [1]
 9)    1           5.54     5.54    3.36%      5.54     5.54    3.36%  _zsh_highlight_bind_widgets

-----------------------------------------------------------------------------------

      12/23        0.82     0.07    0.50%      0.82     0.07             set_prompt [17]
       4/23        0.41     0.10    0.25%      0.41     0.10             pmodload [1]
       1/23        0.22     0.22    0.13%      0.22     0.22             prompt_sorin_setup [15]
       2/23        0.17     0.08    0.10%      0.17     0.08             prompt_pure_setup [11]
       1/23        0.13     0.13    0.08%      0.13     0.13             _zsh_highlight_load_highlighters [4]
10)   23           3.62     0.16    2.20%      3.62     0.16    2.20%  add-zsh-hook

-----------------------------------------------------------------------------------

       2/3         0.23     0.11    0.14%      0.23     0.11             pmodload [1]
12)    3           1.04     0.35    0.63%      1.04     0.35    0.63%  is-at-least

-----------------------------------------------------------------------------------

13)    1           0.94     0.94    0.57%      0.94     0.94    0.57%  bashcompinit

-----------------------------------------------------------------------------------

       2/3         0.47     0.23    0.28%      0.23     0.11             prompt_pure_setup [11]
       1/3         0.18     0.18    0.11%      0.18     0.18             add-zle-hook-widget [16]
16)    3           0.47     0.16    0.28%      0.41     0.14    0.25%  add-zle-hook-widget
       1/15        0.06     0.06    0.04%      0.06     0.06             (anon) [6]
       1/3         0.18     0.18    0.11%      0.18     0.18             add-zle-hook-widget [16]

-----------------------------------------------------------------------------------

20)    1           0.17     0.17    0.10%      0.08     0.08    0.05%  complete
       1/1         0.10     0.10    0.06%      0.10     0.10             compdef [19]

-----------------------------------------------------------------------------------

       1/1         0.10     0.10    0.06%      0.10     0.10             complete [20]
19)    1           0.10     0.10    0.06%      0.10     0.10    0.06%  compdef

-----------------------------------------------------------------------------------

       1/1         0.03     0.03    0.02%      0.03     0.03             pmodload [1]
21)    1           0.03     0.03    0.02%      0.03     0.03    0.02%  is-callable

-----------------------------------------------------------------------------------

       2/2         0.01     0.01    0.01%      0.01     0.01             pmodload [1]
22)    2           0.01     0.01    0.01%      0.01     0.01    0.01%  is-darwin
ajfAfgajfAfg

man zshbuiltinsman zshmodules に出会ったものの,依然として pmodloadcompaudit はどう対処したらいいのかわからないので zcompile を試してみる.

ajfAfgajfAfg

教えて! zcompile

man zshbuiltins より.

This builtin command can be used to compile functions or scripts, storing the compiled form in a file, and to examine files containing the compiled form. This allows faster autoloading of functions and sourcing of scripts by avoiding parsing of the text when the files are read.
The first form (without the -c, -a or -t options) creates a compiled file. If only the file argument is given, the output file has the name `file.zwc' and will be placed in the same directory as the file. The shell will load the compiled file instead of the normal function file when the function is autoloaded; see the section `Autoloading Functions' in zshmisc(1) for a description of how autoloaded functions are searched. The extension .zwc stands for `zsh word code'.

ajfAfgajfAfg

↓を叩いた.

find ~/.zprezto/modules -name "*.zsh" | while read line; do echo $line; zcompile $line; done
ajfAfgajfAfg

起動時間の増加を見ないフリして,以前からボトルネックと噂になっていた pyenv の初期化をコメントアウトすると,起動時間が.603まで減少した.はっや.

ajfAfgajfAfg

pyenv はもう使わないのでこのまま消してよさそう.それじゃ……サヨナラ……!(デデデデンッ)

ajfAfgajfAfg

とりあえず当初の目的は達成できてしまったので今回はここまで! .5秒を切りたい欲も出てきてしまったので,第二段をまたいつか多分おそらくMaybeやる.

このスクラップは2022/09/21にクローズされました