Hi, The following example shows that zsh startup time is much slower than other shells. Can this be improved to at least as fast as bash? ==> main.sh <== #!/usr/bin/env bash # vim: set noexpandtab tabstop=2: set -v TIMEFORMAT=%R time for ((i=0;i<100;++i)) do : done time for ((i=0;i<100;++i)) do ./script.sh done time for ((i=0;i<100;++i)) do ./script.dash done time for ((i=0;i<100;++i)) do ./script.bash done time for ((i=0;i<100;++i)) do ./script.ksh done time for ((i=0;i<100;++i)) do ./script.zsh done ==> script.bash <== #!/usr/local/bin/bash ==> script.dash <== #!/usr/local/bin/dash ==> script.ksh <== #!/usr/local/bin/ksh ==> script.sh <== #!/bin/sh ==> script.zsh <== #!/usr/local/bin/zsh $ ./main.sh TIMEFORMAT=%R time for ((i=0;i<100;++i)) do : done 0.001 time for ((i=0;i<100;++i)) do ./script.sh done 0.339 time for ((i=0;i<100;++i)) do ./script.dash done 0.387 time for ((i=0;i<100;++i)) do ./script.bash done 0.486 time for ((i=0;i<100;++i)) do ./script.ksh done 0.538 time for ((i=0;i<100;++i)) do ./script.zsh done 0.953 -- Regards, Peng
try to put "zsh -f" there, instead of just "zsh", and take a look at the time after that.
On Mon, 3 Dec 2018 at 17:28, Peng Yu <pengyu.ut@gmail.com> wrote: > > Hi, > > The following example shows that zsh startup time is much slower than > other shells. Can this be improved to at least as fast as bash? > Is it the last zsh version that's being tested? There was 2x startup improvement at 5.4 or something like this. Also, Zplugin can load plugins after prompt, I load 20 plugins, and my startup times are: repeat 5 { time /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit } /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system 117% cpu 0,111 total /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,10s user 0,05s system 119% cpu 0,130 total /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,11s user 0,05s system 121% cpu 0,129 total /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system 115% cpu 0,119 total /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system 117% cpu 0,109 total I even load prompt after a default prompt, ~ 100 ms after it. The Star-Trek console-like impression this gives can be visible here: https://asciinema.org/a/156726 – much is going on, automatically, in background. > -- > Regards, > Peng -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org
On Thu, Dec 6, 2018 at 8:20 PM Sebastian Gniazdowski <sgniazdowski@gmail.com> wrote: > > On Mon, 3 Dec 2018 at 17:28, Peng Yu <pengyu.ut@gmail.com> wrote: > > > > Hi, > > > > The following example shows that zsh startup time is much slower than > > other shells. Can this be improved to at least as fast as bash? > > > > Is it the last zsh version that's being tested? There was 2x startup > improvement at 5.4 or something like this. Here is the version. I have not set up zsh to do anything fancy. I guess the slowness of startup is because zsh does too many things upfront and has more features than other shells, and the increase in startup time the price that zsh has to pay. $ zsh --version zsh 5.6.2 (x86_64-apple-darwin17.7.0) $ cat ~/.zshrc # Lines configured by zsh-newuser-install HISTFILE=~/.histfile HISTSIZE=1000 SAVEHIST=1000 bindkey -e # End of lines configured by zsh-newuser-install # The following lines were added by compinstall zstyle :compinstall filename '/Users/pengy/.zshrc' autoload -Uz compinit compinit # End of lines added by compinstall > Also, Zplugin can load plugins after prompt, I load 20 plugins, and my > startup times are: > > repeat 5 { time /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit } > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > 117% cpu 0,111 total > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,10s user 0,05s system > 119% cpu 0,130 total > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,11s user 0,05s system > 121% cpu 0,129 total > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > 115% cpu 0,119 total > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > 117% cpu 0,109 total > > I even load prompt after a default prompt, ~ 100 ms after it. The > Star-Trek console-like impression this gives can be visible here: > https://asciinema.org/a/156726 – much is going on, automatically, in > background. > > > -- > > Regards, > > Peng > > -- > Sebastian Gniazdowski > News: https://twitter.com/ZdharmaI > IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin > Blog: http://zdharma.org -- Regards, Peng
[-- Attachment #1: Type: text/plain, Size: 3141 bytes --] I don't think so, zsh is faster than bash for me without rc files: ❯ repeat 5 { time bash --norc --noprofile -c exit } took 0,011s (100% cpu) took 0,011s (98% cpu) took 0,011s (100% cpu) took 0,011s (100% cpu) took 0,011s (99% cpu) ❯ repeat 5 { time zsh -fc exit } took 0,002s (89% cpu) took 0,001s (90% cpu) took 0,001s (92% cpu) took 0,001s (92% cpu) took 0,001s (91% cpu) same with rc files: ❯ repeat 5 { time bash -c exit } took 0,028s (89% cpu) took 0,022s (100% cpu) took 0,022s (100% cpu) took 0,022s (100% cpu) took 0,023s (99% cpu) ❯ repeat 5 { time zsh -c exit } took 0,008s (91% cpu) took 0,008s (92% cpu) took 0,007s (92% cpu) took 0,007s (92% cpu) took 0,005s (91% cpu) Julien Le ven. 7 déc. 2018 à 03:57, Peng Yu <pengyu.ut@gmail.com> a écrit : > On Thu, Dec 6, 2018 at 8:20 PM Sebastian Gniazdowski > <sgniazdowski@gmail.com> wrote: > > > > On Mon, 3 Dec 2018 at 17:28, Peng Yu <pengyu.ut@gmail.com> wrote: > > > > > > Hi, > > > > > > The following example shows that zsh startup time is much slower than > > > other shells. Can this be improved to at least as fast as bash? > > > > > > > Is it the last zsh version that's being tested? There was 2x startup > > improvement at 5.4 or something like this. > > Here is the version. I have not set up zsh to do anything fancy. I > guess the slowness of startup is because zsh does too many things > upfront and has more features than other shells, and the increase in > startup time the price that zsh has to pay. > > $ zsh --version > zsh 5.6.2 (x86_64-apple-darwin17.7.0) > $ cat ~/.zshrc > # Lines configured by zsh-newuser-install > HISTFILE=~/.histfile > HISTSIZE=1000 > SAVEHIST=1000 > bindkey -e > # End of lines configured by zsh-newuser-install > # The following lines were added by compinstall > zstyle :compinstall filename '/Users/pengy/.zshrc' > > autoload -Uz compinit > compinit > # End of lines added by compinstall > > > Also, Zplugin can load plugins after prompt, I load 20 plugins, and my > > startup times are: > > > > repeat 5 { time /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit } > > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > > 117% cpu 0,111 total > > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,10s user 0,05s system > > 119% cpu 0,130 total > > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,11s user 0,05s system > > 121% cpu 0,129 total > > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > > 115% cpu 0,119 total > > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > > 117% cpu 0,109 total > > > > I even load prompt after a default prompt, ~ 100 ms after it. The > > Star-Trek console-like impression this gives can be visible here: > > https://asciinema.org/a/156726 – much is going on, automatically, in > > background. > > > > > -- > > > Regards, > > > Peng > > > > -- > > Sebastian Gniazdowski > > News: https://twitter.com/ZdharmaI > > IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin > > Blog: http://zdharma.org > > > > -- > Regards, > Peng >
Not on my machine.
$ ./main.sh
time ./script.bash
real 0m0.719s
user 0m0.264s
sys 0m0.324s
time ./script.zsh
real 0m1.295s
user 0m0.360s
sys 0m0.680s
==> main.sh <==
#!/usr/bin/env bash
# vim: set noexpandtab tabstop=2:
set -v
time ./script.bash
time ./script.zsh
==> script.bash <==
#!/usr/bin/env zsh
# vim: set noexpandtab tabstop=2:
time for ((i=0;i<100;++i))
do
/usr/local/bin/bash --norc --noprofile -c exit
done
==> script.zsh <==
#!/usr/bin/env zsh
# vim: set noexpandtab tabstop=2:
time for ((i=0;i<100;++i))
do
/usr/local/bin/zsh -fc exit
done
On Fri, Dec 7, 2018 at 10:14 AM Julien Nicoulaud
<julien.nicoulaud@gmail.com> wrote:
>
> I don't think so, zsh is faster than bash for me without rc files:
>
> ❯ repeat 5 { time bash --norc --noprofile -c exit }
> took 0,011s (100% cpu)
> took 0,011s (98% cpu)
> took 0,011s (100% cpu)
> took 0,011s (100% cpu)
> took 0,011s (99% cpu)
> ❯ repeat 5 { time zsh -fc exit }
> took 0,002s (89% cpu)
> took 0,001s (90% cpu)
> took 0,001s (92% cpu)
> took 0,001s (92% cpu)
> took 0,001s (91% cpu)
>
> same with rc files:
> ❯ repeat 5 { time bash -c exit }
> took 0,028s (89% cpu)
> took 0,022s (100% cpu)
> took 0,022s (100% cpu)
> took 0,022s (100% cpu)
> took 0,023s (99% cpu)
> ❯ repeat 5 { time zsh -c exit }
> took 0,008s (91% cpu)
> took 0,008s (92% cpu)
> took 0,007s (92% cpu)
> took 0,007s (92% cpu)
> took 0,005s (91% cpu)
>
> Julien
>
> Le ven. 7 déc. 2018 à 03:57, Peng Yu <pengyu.ut@gmail.com> a écrit :
>>
>> On Thu, Dec 6, 2018 at 8:20 PM Sebastian Gniazdowski
>> <sgniazdowski@gmail.com> wrote:
>> >
>> > On Mon, 3 Dec 2018 at 17:28, Peng Yu <pengyu.ut@gmail.com> wrote:
>> > >
>> > > Hi,
>> > >
>> > > The following example shows that zsh startup time is much slower than
>> > > other shells. Can this be improved to at least as fast as bash?
>> > >
>> >
>> > Is it the last zsh version that's being tested? There was 2x startup
>> > improvement at 5.4 or something like this.
>>
>> Here is the version. I have not set up zsh to do anything fancy. I
>> guess the slowness of startup is because zsh does too many things
>> upfront and has more features than other shells, and the increase in
>> startup time the price that zsh has to pay.
>>
>> $ zsh --version
>> zsh 5.6.2 (x86_64-apple-darwin17.7.0)
>> $ cat ~/.zshrc
>> # Lines configured by zsh-newuser-install
>> HISTFILE=~/.histfile
>> HISTSIZE=1000
>> SAVEHIST=1000
>> bindkey -e
>> # End of lines configured by zsh-newuser-install
>> # The following lines were added by compinstall
>> zstyle :compinstall filename '/Users/pengy/.zshrc'
>>
>> autoload -Uz compinit
>> compinit
>> # End of lines added by compinstall
>>
>> > Also, Zplugin can load plugins after prompt, I load 20 plugins, and my
>> > startup times are:
>> >
>> > repeat 5 { time /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit }
>> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system
>> > 117% cpu 0,111 total
>> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,10s user 0,05s system
>> > 119% cpu 0,130 total
>> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,11s user 0,05s system
>> > 121% cpu 0,129 total
>> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system
>> > 115% cpu 0,119 total
>> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system
>> > 117% cpu 0,109 total
>> >
>> > I even load prompt after a default prompt, ~ 100 ms after it. The
>> > Star-Trek console-like impression this gives can be visible here:
>> > https://asciinema.org/a/156726 – much is going on, automatically, in
>> > background.
>> >
>> > > --
>> > > Regards,
>> > > Peng
>> >
>> > --
>> > Sebastian Gniazdowski
>> > News: https://twitter.com/ZdharmaI
>> > IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin
>> > Blog: http://zdharma.org
>>
>>
>>
>> --
>> Regards,
>> Peng
--
Regards,
Peng
Some of the people on #zsh have seen different results, but `zsh -f`'s start-up over-head has always been higher for me on every platform i've tested (specifically Linux@ARM, Linux@x64, and macOS@x64). It's especially noticeable on the Mac — but all process over-heads are exaggerated on the Mac, so. I don't worry about it too much, because you make up for it as soon as you're able to do something that would have required a fork() in another shell, like sorting an array or resolving a symlink or matching files by attributes. I suppose it might be annoying to use it for an httpd or Make shell though dana
[-- Attachment #1: Type: text/plain, Size: 4531 bytes --] Are there any consensus on how fast is zsh starting time compared with other shells? My test was on Mac via homebrew. On Fri, Dec 7, 2018 at 10:58 AM Peng Yu <pengyu.ut@gmail.com> wrote: > Not on my machine. > > $ ./main.sh > time ./script.bash > > real 0m0.719s > user 0m0.264s > sys 0m0.324s > time ./script.zsh > > real 0m1.295s > user 0m0.360s > sys 0m0.680s > > ==> main.sh <== > #!/usr/bin/env bash > # vim: set noexpandtab tabstop=2: > > set -v > time ./script.bash > time ./script.zsh > > ==> script.bash <== > #!/usr/bin/env zsh > # vim: set noexpandtab tabstop=2: > > time for ((i=0;i<100;++i)) > do > /usr/local/bin/bash --norc --noprofile -c exit > done > > ==> script.zsh <== > #!/usr/bin/env zsh > # vim: set noexpandtab tabstop=2: > > time for ((i=0;i<100;++i)) > do > /usr/local/bin/zsh -fc exit > done > > > On Fri, Dec 7, 2018 at 10:14 AM Julien Nicoulaud > <julien.nicoulaud@gmail.com> wrote: > > > > I don't think so, zsh is faster than bash for me without rc files: > > > > ❯ repeat 5 { time bash --norc --noprofile -c exit } > > took 0,011s (100% cpu) > > took 0,011s (98% cpu) > > took 0,011s (100% cpu) > > took 0,011s (100% cpu) > > took 0,011s (99% cpu) > > ❯ repeat 5 { time zsh -fc exit } > > took 0,002s (89% cpu) > > took 0,001s (90% cpu) > > took 0,001s (92% cpu) > > took 0,001s (92% cpu) > > took 0,001s (91% cpu) > > > > same with rc files: > > ❯ repeat 5 { time bash -c exit } > > took 0,028s (89% cpu) > > took 0,022s (100% cpu) > > took 0,022s (100% cpu) > > took 0,022s (100% cpu) > > took 0,023s (99% cpu) > > ❯ repeat 5 { time zsh -c exit } > > took 0,008s (91% cpu) > > took 0,008s (92% cpu) > > took 0,007s (92% cpu) > > took 0,007s (92% cpu) > > took 0,005s (91% cpu) > > > > Julien > > > > Le ven. 7 déc. 2018 à 03:57, Peng Yu <pengyu.ut@gmail.com> a écrit : > >> > >> On Thu, Dec 6, 2018 at 8:20 PM Sebastian Gniazdowski > >> <sgniazdowski@gmail.com> wrote: > >> > > >> > On Mon, 3 Dec 2018 at 17:28, Peng Yu <pengyu.ut@gmail.com> wrote: > >> > > > >> > > Hi, > >> > > > >> > > The following example shows that zsh startup time is much slower > than > >> > > other shells. Can this be improved to at least as fast as bash? > >> > > > >> > > >> > Is it the last zsh version that's being tested? There was 2x startup > >> > improvement at 5.4 or something like this. > >> > >> Here is the version. I have not set up zsh to do anything fancy. I > >> guess the slowness of startup is because zsh does too many things > >> upfront and has more features than other shells, and the increase in > >> startup time the price that zsh has to pay. > >> > >> $ zsh --version > >> zsh 5.6.2 (x86_64-apple-darwin17.7.0) > >> $ cat ~/.zshrc > >> # Lines configured by zsh-newuser-install > >> HISTFILE=~/.histfile > >> HISTSIZE=1000 > >> SAVEHIST=1000 > >> bindkey -e > >> # End of lines configured by zsh-newuser-install > >> # The following lines were added by compinstall > >> zstyle :compinstall filename '/Users/pengy/.zshrc' > >> > >> autoload -Uz compinit > >> compinit > >> # End of lines added by compinstall > >> > >> > Also, Zplugin can load plugins after prompt, I load 20 plugins, and my > >> > startup times are: > >> > > >> > repeat 5 { time /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit } > >> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > >> > 117% cpu 0,111 total > >> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,10s user 0,05s system > >> > 119% cpu 0,130 total > >> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,11s user 0,05s system > >> > 121% cpu 0,129 total > >> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > >> > 115% cpu 0,119 total > >> > /usr/local/bin/zsh-5.6.2-dev-1 -i -c exit 0,09s user 0,04s system > >> > 117% cpu 0,109 total > >> > > >> > I even load prompt after a default prompt, ~ 100 ms after it. The > >> > Star-Trek console-like impression this gives can be visible here: > >> > https://asciinema.org/a/156726 – much is going on, automatically, in > >> > background. > >> > > >> > > -- > >> > > Regards, > >> > > Peng > >> > > >> > -- > >> > Sebastian Gniazdowski > >> > News: https://twitter.com/ZdharmaI > >> > IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin > >> > Blog: http://zdharma.org > >> > >> > >> > >> -- > >> Regards, > >> Peng > > > > -- > Regards, > Peng > -- Regards, Peng
On Wed, Sep 4, 2019 at 12:15 PM Peng Yu <pengyu.ut@gmail.com> wrote:
>
> Are there any consensus on how fast is zsh starting time compared with
> other shells? My test was on Mac via homebrew.
You need to pass -d to zsh to make benchmarks fair. Otherwise zsh is
sourcing global configs while bash doesn't.
time ( repeat 1000 zsh -df -c '' )
time ( repeat 1000 bash -c '' )
I get 4 ms and 3 ms for zsh and bash respectively.
Note that this number has virtually no bearing on interactive shell
startup time.
Roman.
> You need to pass -d to zsh to make benchmarks fair. Where is -d defined in the man page of zsh? I don't find it. > Otherwise zsh is > sourcing global configs while bash doesn't. > > time ( repeat 1000 zsh -df -c '' ) > time ( repeat 1000 bash -c '' ) > > I get 4 ms and 3 ms for zsh and bash respectively. > > Note that this number has virtually no bearing on interactive shell > startup time. Here is my runtime result. There is still about 50% startup time overhead of zsh compared to bash. This is quite significant. time ( repeat 1000 zsh -df -c '' ) ( repeat 1000; do; zsh -df -c ''; done; ) 3.01s user 6.07s system 75% cpu 12.056 total time ( repeat 1000 bash -c '' ) ( repeat 1000; do; bash -c ''; done; ) 2.16s user 2.73s system 72% cpu 6.719 total -- Regards, Peng
On Thu, Sep 5, 2019 at 10:30 PM Peng Yu <pengyu.ut@gmail.com> wrote: > > > You need to pass -d to zsh to make benchmarks fair. > > Where is -d defined in the man page of zsh? I don't find it. From `zsh --help`: -d equivalent to --no-globalrcs > Here is my runtime result. There is still about 50% startup time > overhead of zsh compared to bash. This is quite significant. What are you trying to optimize? If you care about the startup time of your interactive shell, 12 ms vs 6.7 ms doesn't make a difference. Roman.
>> Where is -d defined in the man page of zsh? I don't find it. > > From `zsh --help`: > > -d equivalent to --no-globalrcs Can this be found in the manpage? I don't see it. >> Here is my runtime result. There is still about 50% startup time >> overhead of zsh compared to bash. This is quite significant. > > What are you trying to optimize? If you care about the startup time of > your interactive shell, 12 ms vs 6.7 ms doesn't make a difference. It is not for interactive use of zsh/bash. I am making scripts using shells. 12 vs 6.7 ms that is 1x or 50% difference depending on which way you consider the ratio, which is a quite significant difference. -- Regards, Peng
>>> Where is -d defined in the man page of zsh? I don't find it.
>>
>> From `zsh --help`:
>>
>> -d equivalent to --no-globalrcs
>
> Can this be found in the manpage? I don't see it.
In manpage zshoptions(1):
GLOBAL_RCS (-d) <D>
If this option is unset, the startup files /etc/zprofile, /etc/zshrc,
/etc/zlogin and /etc/zlogout will not be run. It can be disabled and
re-enabled at any time, including inside local startup files (.zshrc, etc.).
On Thu, Sep 5, 2019 at 10:45 PM Peng Yu <pengyu.ut@gmail.com> wrote:
> > What are you trying to optimize? If you care about the startup time of
> > your interactive shell, 12 ms vs 6.7 ms doesn't make a difference.
>
> It is not for interactive use of zsh/bash. I am making scripts using
> shells. 12 vs 6.7 ms that is 1x or 50% difference depending on which
> way you consider the ratio, which is a quite significant difference.
Perhaps you can change your code to spawn fewer zsh processes?
What does your code look like? I've seen plenty of code that spends
most of its CPU time on forking but I don't recall seeing anything
that calls `zsh -dfc` or the like in a tight loop.
Roman.
[-- Attachment #1: Type: text/plain, Size: 579 bytes --] > > > Perhaps you can change your code to spawn fewer zsh processes? I am doing so. But because zsh is much slower than bash, I will not use zsh for my scripts at all. Only if it is faster than bash, I may consider using it. I think this is one aspect that zsh developers may consider to optimize. What does your code look like? I've seen plenty of code that spends > most of its CPU time on forking but I don't recall seeing anything > that calls `zsh -dfc` or the like in a tight loop. I just use shebang to call a specific shell for a whole script. > > -- Regards, Peng
On Fri, Sep 6, 2019 at 2:57 PM Peng Yu <pengyu.ut@gmail.com> wrote: >> >> >> Perhaps you can change your code to spawn fewer zsh processes? > > > But because zsh is much slower than bash... This isn't a fair summary of your benchmark. It would be more accurate to say that zsh on some systems may take up to twice as long as bash to execute an empty script. > Only if it is faster than bash, I may consider using it. Could you share some details of your environment in which the overhead of 6.7 ms per script is OK but 12 ms is not? When running a script interactively, this difference shouldn't matter. 12 ms is practically zero as far as human perception is concerned. When running lots and lots of scripts in a tight loop, then it's usually better to change your code to avoid spawning so many shell processes. In zsh autoloading functions is often a good solution, but the particular code changes will depend on what your code looks like so that it results in so many shell processes. Roman.
On Fri, 6 Sep 2019 at 15:11, Roman Perepelitsa <roman.perepelitsa@gmail.com> wrote: > > But because zsh is much slower than bash... > > This isn't a fair summary of your benchmark. It would be more accurate > to say that zsh on some systems may take up to twice as long as bash > to execute an empty script. Even this is too strong said. I would say: "zsh startups 5-7 ms longer than bash". -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org
[-- Attachment #1: Type: text/plain, Size: 1468 bytes --] > > But because zsh is much slower than bash... > > This isn't a fair summary of your benchmark. It would be more accurate > to say that zsh on some systems may take up to twice as long as bash > to execute an empty script. The slow startup is sufficient to deter me from using it as bash can satisfy most of my usage. Although zsh has certain features that bash has, I don’t want to trade-off the 2x startup time difference for those features. I only care about the Unix variants but not Windows. My test is on Mac via homebrew installations. I don’t think that there will be too much difference in Linux. But I don’t have a native Linux machine to test. Whoever has access to a native Linux machine may post the runtime here for comparison of different OSes. > Only if it is faster than bash, I may consider using it. > > Could you share some details of your environment in which the overhead > of 6.7 ms per script is OK but 12 ms is not? > > When running a script interactively, this difference shouldn't matter. I build a library that one causes another. In such cases, the startup time matters, as most of scripts don’t take a long time to run, I don’t want the startup eat up too much time. I know I can use ‘source’ circumvent this problem to a certain extent. But having a shorter startup time is still a good thing. If bash can do it, I don’t think zsh is absolutely unable to do it. -- Regards, Peng
On Fri, Sep 6, 2019 at 3:44 PM Peng Yu <pengyu.ut@gmail.com> wrote: > I build a library that one causes another. In such cases, the > startup time matters, as most of scripts don’t take a long > time to run, I don’t want the startup eat up too much time. > I know I can use ‘source’ circumvent this problem to a certain extent. Autoloading was designed to solve this problem (among others). Give it a try. Your zsh scripts might become orders of magnitude faster than in bash and you don't even have to change them. For example, suppose you have two files in your ~/bin: % cat ~/bin/greet #!/usr/bin/env zsh print -r "Hello, $1" % cat ~/bin/spam #!/usr/bin/env zsh repeat $1 greet $2 Let's further suppose that ~/bin is in your $PATH. % spam 3 $USER Hello, romka Hello, romka Hello, romka You can make greet and spam much faster by adding these two lines to your ~/.zshrc: fpath+=~/bin autoload -Uz ~/bin/*(x:t) On my system this simple 2-line addition to ~/.zshrc speeds up `spam 3 $USER` by a factor of 5000. Note that you can still invoke your scripts the same way as before. Use ~/bin/spam or =spam to force-spawn a new shell process, while the plain spam will call a function within the same shell process. The first call to spam will automatically source ~/bin/spam and turn it into a function. > But having a shorter startup time is still a good thing. If bash can > do it, I don’t think zsh is absolutely unable to do it. Faster is always better than slower but when there is no practical difference then the development effort might be better spent elsewhere. Everyone's environment is different but from my point of view zsh startup is fast enough to be indistinguishable from zero. Roman.