zsh-users
 help / color / mirror / code / Atom feed
From: Nick Cross <nick@goots.org>
To: Roman Perepelitsa <roman.perepelitsa@gmail.com>,
	Bart Schaefer <schaefer@brasslantern.com>
Cc: Frank Terbeck <ft@bewatermyfriend.org>,
	Peng Yu <pengyu.ut@gmail.com>, zsh-users <zsh-users@zsh.org>
Subject: Re: Is it worthwhile to use oh-my-zsh?
Date: Sun, 8 Sep 2019 20:05:12 +0100	[thread overview]
Message-ID: <51c3449f-e35c-2935-551f-705219f9a0d6@goots.org> (raw)
In-Reply-To: <CAN=4vMq6oVYKT+3KCnS4CM7sqzY78j-9ymG9BctSzu43s95RFQ@mail.gmail.com>



I've tried various VCS prompts out and my favourite so far is 
https://github.com/woefe/git-prompt.zsh which is fast and also asynchronous.

Nick



On 08/09/2019 16:41, Roman Perepelitsa wrote:
> On Sun, Sep 8, 2019 at 2:33 AM Bart Schaefer <schaefer@brasslantern.com> wrote:
>>
>> On Sat, Sep 7, 2019 at 1:19 PM Frank Terbeck <ft@bewatermyfriend.org> wrote:
>>>
>>> Roman Perepelitsa wrote:
>>>> Note that vcs_info is likely to make your prompt noticeably sluggish.
>>>
>>> Depends on configuration. The defaults avoid most features that are
>>> particularly expensive.
>>
>> I've been using the following lately ... note that I am pathologically
>> allergic to "setopt prompt_subst":
>>
>> ...
> 
> I ran a few benchmarks to measure prompt latency induced by vcs_info
> with conservative settings. By prompt latency I mean the time it takes
> for prompt to appear after you hit ENTER. I've measured 3
> configurations:
> 
> - bart: plain bart theme.
> - bart + vcs_info: the config posted by Bart on this thread.
> - bart + gitstatus: functionally equivalent to bart + vcs_info but
> using gitstatus instead of vcs_info [1].
> 
> Prompt latency in zsh Git repo on a high-end desktop running Linux:
> 
> - bart: 0.28ms
> - bart + vcs_info: 28ms
> - bart + gitstatus: 0.81ms
> 
> The slowdown from vcs_info is significant but the overall prompt
> latency is still reasonably low. If you pay attention, you can notice
> the lag but it's not jarring. Most people start being annoyed by
> prompt lag when it reaches around 50ms.
> 
> The same machine running WSL:
> 
> - bart: 2.1ms
> - bart + vcs_info: 87ms
> - bart + gitstatus: 4.9ms
> 
> Here the lag induced by vcs_info cannot be ignored. Local shell feels
> like SSH across the continent. bart + gitstatus stays far below the
> perceptible lag threshold and feels instant.
> 
> A typical laptop running Linux or macOS falls somewhere in between my
> two benchmark setups, with slower macbooks being close in performance
> to WSL on my desktop.
> 
> To sum up, vcs_info with conservative settings adds enough prompt
> latency to make it perceptible without any instruments. Whether it
> makes prompt lag annoyingly high depends on the OS and hardware.
> 
> Interactive ZSH has a reputation for being slow primarily due to slow
> themes, which are in turn slow primarily due to suboptimal Git
> integration. The difference in performance between fast and slow ZSH
> bindings for Git is over an order of magnitude. vcs_info, while being
> flexible, is one of the slowest. It's convenient to use vcs_info
> thanks to its being bundled with zsh but but this convenience comes at
> a great cost.
> 
> Roman.
> 
> [1] bart + gitstatus configuration can be obtained by appending the
> following code to bart + vcs_info.
> 
> if [[ ! -d ~/gitstatus ]]; then
>    git checkout https://github.com/romkatv/gitstatus.git ~/gitstatus
> fi
> 
> source ~/gitstatus/gitstatus.plugin.zsh
> 
> # Start gitstatusd in the background and give it ID 'MY'.
> # It'll terminate when the parent shell terminates.
> gitstatus_start MY
> 
> vcs-info-v() {
>    if gitstatus_query -p MY && [[ $VCS_STATUS_RESULT == 'ok-sync' ]]; then
>      # The current directory is inside a Git repo.
>      RPS1='%F{5}(%fgit%F{5})%F{3}-%F{5}['
>      # Branch or tag or commit.
>      local b=$VCS_STATUS_LOCAL_BRANCH
>      : ${b:=$VCS_STATUS_TAG}
>      : ${b:=$VCS_STATUS_COMMIT[1,8]}
>      [[ -o prompt_subst ]] && b='${:-'${(qqq)b}'}'
>      RPS1+="%F{2}${b//\%/%%}%f"
>      # Add '<'/'>' after branch name if there are changes to pull/push.
>      (( VCS_STATUS_COMMITS_BEHIND )) && RPS1+='<'
>      (( VCS_STATUS_COMMITS_AHEAD )) && RPS1+='>'
>      # Action, a.k.a. state. For example, 'merge'.
>      [[ -n $VCS_STATUS_ACTION ]] && RPS1+="%F{3}|%F{1}$VCS_STATUS_ACTION"
>      RPS1+='%F{5}]%f'
>    else
>      # Not a Git repo. Call vcs_info in case it's a sv[nk]|bzr repo.
>      vcs_info
>      RPS1=${vcs_info_msg_0_% }
>    fi
> }
> 


  reply	other threads:[~2019-09-08 19:06 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-06 18:37 Peng Yu
     [not found] ` <CAO1rNLj9YA+4a+5SV+PURsfPJXNm8xY45i6kbrsPpF2NFY1fsg@mail.gmail.com>
2019-09-06 19:33   ` Peng Yu
2019-09-07  0:43     ` Danh Doan
2019-09-07  0:49       ` Yaro Kasear
2019-09-07  1:40       ` Peng Yu
2019-09-07  1:59         ` Danh Doan
2019-09-07 12:22       ` Daniel Shahaf
2019-09-07 13:58 ` Roman Perepelitsa
2019-09-07 20:18   ` Frank Terbeck
2019-09-08  0:33     ` Bart Schaefer
2019-09-08 15:41       ` Roman Perepelitsa
2019-09-08 19:05         ` Nick Cross [this message]
2019-09-08 19:41           ` Roman Perepelitsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51c3449f-e35c-2935-551f-705219f9a0d6@goots.org \
    --to=nick@goots.org \
    --cc=ft@bewatermyfriend.org \
    --cc=pengyu.ut@gmail.com \
    --cc=roman.perepelitsa@gmail.com \
    --cc=schaefer@brasslantern.com \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).