Zsh でプロファイルをとる


zsh/zprof というモジュールが使える。

zsh のモジュールは `zmodload $module` で読みこむ。

```zsh
zmodload zsh/zprof
```

`zprof` でプロファイルを出力する。

```zsh
zprof

# num  calls                time                       self            name

# -----------------------------------------------------------------------------------

#  1)    1        1421.46  1421.46   98.57%   1421.46  1421.46   98.57%  update_prompt

#  2)   30           3.45     0.12    0.24%      3.45     0.12    0.24%  url-quote-magic

#  3)    2           3.79     1.90    0.26%      3.24     1.62    0.22%  _all_labels

#  4)   18           4.69     0.26    0.33%      3.18     0.18    0.22%  _description

#  5)   19           2.43     0.13    0.17%      2.43     0.13    0.17%  _setup

#  6)    1          16.38    16.38    1.14%      1.82     1.82    0.13%  _main_complete

#  7)    1          12.74    12.74    0.88%      1.71     1.71    0.12%  _alternative

#  8)   16           2.68     0.17    0.19%      0.73     0.05    0.05%  _next_label

#  9)    1           1.41     1.41    0.10%      0.72     0.72    0.05%  _parameters

# 10)    8           0.61     0.08    0.04%      0.61     0.08    0.04%  _tags

# 11)    1          16.82    16.82    1.17%      0.37     0.37    0.03%  magic-abbrev-expand-and-normal-complete

# 12)    1          13.50    13.50    0.94%      0.30     0.30    0.02%  _complete

# 13)    8           0.28     0.04    0.02%      0.28     0.04    0.02%  _requested

# 14)    2           3.85     1.92    0.27%      0.26     0.13    0.02%  _path_commands

# 15)    2           4.27     2.14    0.30%      0.25     0.13    0.02%  _wanted

# 16)    3           0.24     0.08    0.02%      0.24     0.08    0.02%  magic-abbrev-expand

# 17)    1          12.91    12.91    0.89%      0.16     0.16    0.01%  _command_names

# 18)    1           0.16     0.16    0.01%      0.16     0.16    0.01%  _jobs

# 19)    1          13.12    13.12    0.91%      0.15     0.15    0.01%  _normal

# 20)    1           0.15     0.15    0.01%      0.15     0.15    0.01%  _oldlist

# 21)    1           0.09     0.09    0.01%      0.09     0.09    0.01%  update_window_title

# 22)    1           0.52     0.52    0.04%      0.09     0.09    0.01%  magic-space

# 23)    1           0.08     0.08    0.01%      0.08     0.08    0.01%  _suffix_alias_files

# 24)    1           0.07     0.07    0.01%      0.07     0.07    0.01%  _first

# 25)    1          12.98    12.98    0.90%      0.07     0.07    0.01%  _autocd

# 26)    1           0.11     0.11    0.01%      0.04     0.04    0.00%  magic-abbrev-expand-and-accept

# 

# -----------------------------------------------------------------------------------

# 

#  1)    1        1421.46  1421.46   98.57%   1421.46  1421.46   98.57%  update_prompt

# 

# -----------------------------------------------------------------------------------

# 

# 11)    1          16.82    16.82    1.17%      0.37     0.37    0.03%  magic-abbrev-expand-and-normal-complete

#        1/3         0.08     0.08    0.01%      0.08     0.08             magic-abbrev-expand [16]

#        1/1        16.38    16.38    1.14%      1.82     1.82             _main_complete [6]

# 

# -----------------------------------------------------------------------------------

# 

#        1/1        16.38    16.38    1.14%      1.82     1.82             magic-abbrev-expand-and-normal-complete [11]

#  6)    1          16.38    16.38    1.14%      1.82     1.82    0.13%  _main_complete

#        1/1         0.15     0.15    0.01%      0.15     0.15             _oldlist [20]

#        1/19        0.92     0.92    0.06%      0.92     0.92             _setup [5]

#        1/1        13.50    13.50    0.94%      0.30     0.30             _complete [12]

# 

# -----------------------------------------------------------------------------------

# 

#        1/1        13.50    13.50    0.94%      0.30     0.30             _main_complete [6]

# 12)    1          13.50    13.50    0.94%      0.30     0.30    0.02%  _complete

#        1/1         0.07     0.07    0.01%      0.07     0.07             _first [24]

#        1/1        13.12    13.12    0.91%      0.15     0.15             _normal [19]

# 

# -----------------------------------------------------------------------------------

# 

#        1/1        13.12    13.12    0.91%      0.15     0.15             _complete [12]

# 19)    1          13.12    13.12    0.91%      0.15     0.15    0.01%  _normal

#        1/1        12.98    12.98    0.90%      0.07     0.07             _autocd [25]

# 

# -----------------------------------------------------------------------------------

# 

#        1/1        12.98    12.98    0.90%      0.07     0.07             _normal [19]

# 25)    1          12.98    12.98    0.90%      0.07     0.07    0.01%  _autocd

#        1/1        12.91    12.91    0.89%      0.16     0.16             _command_names [17]

# 

# -----------------------------------------------------------------------------------

# 

#        1/1        12.91    12.91    0.89%      0.16     0.16             _autocd [25]

# 17)    1          12.91    12.91    0.89%      0.16     0.16    0.01%  _command_names

#        1/1        12.74    12.74    0.88%      1.71     1.71             _alternative [7]

# 

# -----------------------------------------------------------------------------------

# 

#        1/1        12.74    12.74    0.88%      1.71     1.71             _command_names [17]

#  7)    1          12.74    12.74    0.88%      1.71     1.71    0.12%  _alternative

#        1/1         0.08     0.08    0.01%      0.08     0.08             _suffix_alias_files [23]

#        1/1         0.16     0.16    0.01%      0.16     0.16             _jobs [18]

#        8/8         0.28     0.04    0.02%      0.28     0.04             _requested [13]

#        2/8         0.39     0.19    0.03%      0.39     0.19             _tags [10]

#        1/1         1.41     1.41    0.10%      0.72     0.72             _parameters [9]

#        8/18        2.19     0.27    0.15%      1.52     0.19             _description [4]

#       16/16        2.68     0.17    0.19%      0.73     0.05             _next_label [8]

#        1/2         3.85     3.85    0.27%      0.22     0.22             _path_commands [14]

# 

# -----------------------------------------------------------------------------------

# 

#        8/18        2.19     0.27    0.15%      1.52     0.19             _alternative [7]

#        8/18        1.95     0.24    0.14%      1.30     0.16             _next_label [8]

#        2/18        0.55     0.28    0.04%      0.36     0.18             _all_labels [3]

#  4)   18           4.69     0.26    0.33%      3.18     0.18    0.22%  _description

#       18/19        1.51     0.08    0.10%      1.51     0.08             _setup [5]

# 

# -----------------------------------------------------------------------------------

# 

#        1/2         3.58     3.58    0.25%      0.12     0.12             _path_commands [14]

#        1/2         0.69     0.69    0.05%      0.13     0.13             _parameters [9]

# 15)    2           4.27     2.14    0.30%      0.25     0.13    0.02%  _wanted

#        6/8         0.23     0.04    0.02%      0.23     0.04             _tags [10]

#        2/2         3.79     1.90    0.26%      3.24     1.62             _all_labels [3]

# 

# -----------------------------------------------------------------------------------

# 

#        1/2         3.85     3.85    0.27%      0.22     0.22             _alternative [7]

#        1/2         3.62     3.62    0.25%      0.04     0.04             _path_commands [14]

# 14)    2           3.85     1.92    0.27%      0.26     0.13    0.02%  _path_commands

#        1/2         3.58     3.58    0.25%      0.12     0.12             _wanted [15]

#        1/2         3.62     3.62    0.25%      0.04     0.04             _path_commands [14]

# 

# -----------------------------------------------------------------------------------

# 

#        2/2         3.79     1.90    0.26%      3.24     1.62             _wanted [15]

#  3)    2           3.79     1.90    0.26%      3.24     1.62    0.22%  _all_labels

#        2/18        0.55     0.28    0.04%      0.36     0.18             _description [4]

# 

# -----------------------------------------------------------------------------------

# 

#        1/30        0.34     0.34    0.02%      0.34     0.34             magic-space [22]

#  2)   30           3.45     0.12    0.24%      3.45     0.12    0.24%  url-quote-magic

# 

# -----------------------------------------------------------------------------------

# 

#       16/16        2.68     0.17    0.19%      0.73     0.05             _alternative [7]

#  8)   16           2.68     0.17    0.19%      0.73     0.05    0.05%  _next_label

#        8/18        1.95     0.24    0.14%      1.30     0.16             _description [4]

# 

# -----------------------------------------------------------------------------------

# 

#       18/19        1.51     0.08    0.10%      1.51     0.08             _description [4]

#        1/19        0.92     0.92    0.06%      0.92     0.92             _main_complete [6]

#  5)   19           2.43     0.13    0.17%      2.43     0.13    0.17%  _setup

# 

# -----------------------------------------------------------------------------------

# 

#        1/1         1.41     1.41    0.10%      0.72     0.72             _alternative [7]

#  9)    1           1.41     1.41    0.10%      0.72     0.72    0.05%  _parameters

#        1/2         0.69     0.69    0.05%      0.13     0.13             _wanted [15]

# 

# -----------------------------------------------------------------------------------

# 

#        2/8         0.39     0.19    0.03%      0.39     0.19             _alternative [7]

#        6/8         0.23     0.04    0.02%      0.23     0.04             _wanted [15]

# 10)    8           0.61     0.08    0.04%      0.61     0.08    0.04%  _tags

# 

# -----------------------------------------------------------------------------------

# 

# 22)    1           0.52     0.52    0.04%      0.09     0.09    0.01%  magic-space

#        1/3         0.09     0.09    0.01%      0.09     0.09             magic-abbrev-expand [16]

#        1/30        0.34     0.34    0.02%      0.34     0.34             url-quote-magic [2]

# 

# -----------------------------------------------------------------------------------

# 

#        8/8         0.28     0.04    0.02%      0.28     0.04             _alternative [7]

# 13)    8           0.28     0.04    0.02%      0.28     0.04    0.02%  _requested

# 

# -----------------------------------------------------------------------------------

# 

#        1/3         0.09     0.09    0.01%      0.09     0.09             magic-space [22]

#        1/3         0.08     0.08    0.01%      0.08     0.08             magic-abbrev-expand-and-normal-complete [11]

#        1/3         0.07     0.07    0.00%      0.07     0.07             magic-abbrev-expand-and-accept [26]

# 16)    3           0.24     0.08    0.02%      0.24     0.08    0.02%  magic-abbrev-expand

# 

# -----------------------------------------------------------------------------------

# 

#        1/1         0.16     0.16    0.01%      0.16     0.16             _alternative [7]

# 18)    1           0.16     0.16    0.01%      0.16     0.16    0.01%  _jobs

# 

# -----------------------------------------------------------------------------------

# 

#        1/1         0.15     0.15    0.01%      0.15     0.15             _main_complete [6]

# 20)    1           0.15     0.15    0.01%      0.15     0.15    0.01%  _oldlist

# 

# -----------------------------------------------------------------------------------

# 

# 26)    1           0.11     0.11    0.01%      0.04     0.04    0.00%  magic-abbrev-expand-and-accept

#        1/3         0.07     0.07    0.00%      0.07     0.07             magic-abbrev-expand [16]

# 

# -----------------------------------------------------------------------------------

# 

# 21)    1           0.09     0.09    0.01%      0.09     0.09    0.01%  update_window_title

# 

# -----------------------------------------------------------------------------------

# 

#        1/1         0.08     0.08    0.01%      0.08     0.08             _alternative [7]

# 23)    1           0.08     0.08    0.01%      0.08     0.08    0.01%  _suffix_alias_files

# 

# -----------------------------------------------------------------------------------

# 

#        1/1         0.07     0.07    0.01%      0.07     0.07             _complete [12]

# 24)    1           0.07     0.07    0.01%      0.07     0.07    0.01%  _first

```

`update_prompt` という関数がめちゃめちゃ遅いということがわかる。