edc / bass

Make Bash utilities usable in Fish shell
MIT License
2.2k stars 70 forks source link

Significantly slower to source paths to a different directory #92

Open OJFord opened 3 years ago

OJFord commented 3 years ago

I'm hesitant to even open this, because I really don't understand what or how is happening, but it's really repeatable and badly affects my terminal start time:

With a time bass source .profile in my config.fish:

# [new terminal window]
________________________________________________________
Executed in    3.63 secs   fish           external
   usr time  280.52 millis  1361.00 micros  279.16 millis
   sys time  330.70 millis    0.00 micros  330.70 millis

~>time bass source .profile

________________________________________________________
Executed in  130.04 millis    fish           external
   usr time   98.23 millis    0.00 millis   98.23 millis
   sys time   14.84 millis    5.71 millis    9.14 millis

~>fish

________________________________________________________
Executed in    3.51 secs   fish           external
   usr time  226.67 millis    4.50 millis  222.18 millis
   sys time  310.05 millis    0.64 millis  309.42 millis

~>head -n1 .config/fish/config.fish
time bass source "$HOME/.profile"

Why is it so much slower when invoked from config.fish? Sure, there's other stuff in there, but it's only the bass source that I'm timing, as the combination of fish & head outputs show.

OJFord commented 3 years ago

Oh, ah!

~>time bass source "$HOME/.profile"

________________________________________________________
Executed in    3.57 secs   fish           external
   usr time  268.13 millis    1.76 millis  266.38 millis
   sys time  291.01 millis    3.44 millis  287.57 millis

(Changed .profile to $HOME/.profile in order to exactly match config.fish!)

OJFord commented 3 years ago

Which of course you'd think could only be a fish issue, but:

~>time echo "$HOME/.profile" >/dev/null

________________________________________________________
Executed in  122.00 micros    fish           external
   usr time  128.00 micros  128.00 micros    0.00 micros
   sys time   17.00 micros   17.00 micros    0.00 micros

I don't understand this..!

OJFord commented 3 years ago

Ah, of course.. :facepalm: - it's not that there's a variable interpolated, it's that it's an absolute path:

~>time bass source /home/ojf/.profile

________________________________________________________
Executed in    3.63 secs   fish           external
   usr time  309.51 millis    2.36 millis  307.15 millis
   sys time  332.80 millis    3.63 millis  329.16 millis
~>pwd
/home/ojf
~>time bass source .profile

________________________________________________________
Executed in  119.79 millis    fish           external
   usr time   94.47 millis    2.33 millis   92.14 millis
   sys time    9.40 millis    2.67 millis    6.73 millis
OJFord commented 3 years ago

Wrong again..! It seems to be the presence of forward slashes, not necessarily that it's at the beginning (an absolute path).