unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Ship Mints <shipmints@gmail.com>
To: jc+o.emacs@wz.ht
Cc: emacs-devel@gnu.org
Subject: Re: Emacs graphical frontends / responsiveness
Date: Sun, 20 Oct 2024 17:49:31 -0400	[thread overview]
Message-ID: <CAN+1Hbqb9q6LBpjhzheSxo4ssGiYjqEb8j0S26=DgQOMrMd=ZQ@mail.gmail.com> (raw)
In-Reply-To: <6cadfc93-3fc5-4fcf-b0a6-f54774c36f43@wz.ht>

[-- Attachment #1: Type: text/plain, Size: 6978 bytes --]

If you're on a Mac, which I'm guessing, and, if by chance you are using
this build https://emacsformacosx.com/, I highly suggest that you try this
one instead https://github.com/jimeh/emacs-builds/releases/tag/Emacs-29.4.
It is much, much faster and exhibits correct behavior with code that
previously misbehaved and has a few patches applied that correct some GUI
features (internal-border colors, for example). I've been using the jimeh
build successfully for a while now after much frustration of my own this
summer. Pretty much all resolved and I have a lot of customizations. On
gotcha is that the jimeh build directly packages the gcc support needed for
native packages which is great BUT it is missing one component during
trampoline bootstrap (jimeh is aware) so start it once from the command
line and let it "warm up," and assuming you have gcc somewhere on your path
(via homebrew or somewhere else), thereafter it's fine launched from
Spotlight or wherever.

I noticed the following in what might be your init.el, though not directly
performance related, just FYI:

;; Make native compilation silent and prune its cache.
(when (native-comp-available-p)
  (setq native-comp-async-report-warnings-errors 'silent)
  (setq native-compile-prune-cache t)) ; <-- this is a function not a
variable

Take some care with your mode-line entries such as display-battery-mode as
I believe it will get queried during every mode-line refresh.

Also take some care with post-command-hook. Check to see what's on the hook
is what you need and nothing more. These get called after every character
you type (as Eli explained, they're all implemented via commands, though
the main "hot path" commands are in C, as you'd expect). Run M-x
list-timers and see if there are any timers running very frequently on
short intervals that you didn't expect.

I took a quick peek to see if you'd experience issues with some of the
caching challenges using project.el, tramp, etc. and nothing jumped out at
me. If there were calls to project-current / project-name on your mode-line
or tab-bar customizations, those could get in the way.

We're all in the same boat and happy to help. I speak for everyone as I've
observed the sheer amount of consideration, work, and thoughtful feedback
that goes into Emacs as a platform on a continual basis.

On Sun, Oct 20, 2024 at 2:48 PM Jordan Ellis Coppard <jc+o.emacs@wz.ht>
wrote:

> Hello friends,
>
>
> I've been using Emacs as properly as I can for the past year-ish (read:
> all-in instead of bailing out constantly) after circling around the edge
> of the pool for a few years.
>
> Overall I think I like it, although I am still less productive than I
> would be in say an IDE from JetBrains or Helix (a TUI editor). I'm sure
> I can close that gap as I tinker with Emacs more and more.
>
> One thing that bothers me without fail is how slow, visually, Emacs is.
> I can often times type faster than the GUI can keep up, with noticeable
> hitching and delays from when I have typed a character to the point
> where I see it in a buffer and so forth. This is probably one of the
> biggest things ruining my experience because no matter how focused I am
> on the task at hand seeing this behaviour always rips me out of focus.
> That's also why I feel less productive with Emacs.
>
> I run a fairly lean Emacs configuration, however even basic behaviour
> under `emacs -Q` is slow. Take `show-paren-mode` with `show-paren-delay`
> set to 0; Helix, VS Code, Neovim are able to instantly highlight matched
> brackets as I move my cursor around. With Emacs there is a noticeable
> delay (yes even with a delay of 0 and in `emacs -Q`). Often times I can
> type faster than the minibuffer input area can handle when filtering
> completion candidates e.g. `C-h o`.
>
> I don't want my editor (or whatever specific title you'd like to apply)
> to EVER not immediately respond to input unless it's crashed. I don't
> want my editor running locally only accessing local resources to feel
> like an ssh connection with 200 ms of latency when nothing else, nor any
> other editor I've tried, does. I understand if I provide some input that
> I may be asking it to do heavy lifting and that eventually it will get
> back to me with the result (that's fine), but blocking everything else
> while that happens is frustrating as I have described above.
>
> I recently saw in this mailing list Yuan benchmark character insertion
> into a buffer (with syntax highlighting) at around ~30 ms (if I recall
> correctly). That's an update rate of 33 times a second, with presumably
> (for benchmarking's sake) nothing else going on; thus one would assume
> even lower update rates if you use a few features here and there
> built-in or otherwise. Emacs struggling to update display in under 16 ms
> was... shocking to see.
>
> I also recently read this post:
> https://gist.github.com/ghosty141/c93f21d6cd476417d4a9814eb71dd46e  --
> which left me feeling quite sad (if it is accurate) regarding the
> internals surrounding the GUI and so how apparently needlessly difficult
> in today's age it would/will be to improve (over how it currently is). I
> understand the historical legacy.
>
> So I ask: is it possible that Emacs' GUI be decoupled from the lisp core
> such that updates can happen as fast as possible (less perceived delay),
> and that the (what I gather from the above post) rube goldberg display
> internals be remade from scratch, or more likely, a new frontend (from
> scratch) as an alternative?
>
> I don't ask as a "please do this for me".
>
> I'll get involved but if the answer ahead of time is a "no it's never
> going to happen even with a completely working patch in future" then I
> think it'd best for me to abandon Emacs. I have ADHD and the visual
> hitching and lack of responsiveness to input drives me insane. I fear
> it's something I'll never be able to get over and in a world of less
> configurable vs. visually hitching and slow I would rather take the former.
>
> I realise this email has been fairly critical so far. I have said all of
> this without malice, I just feel it prudent to describe how important
> this is (at least to me) by not mincing words.
>
> Besides the criticisms: Emacs, so far, is amazing. I can make it do
> whatever I want, however I want, and mould it to be uniquely my own
> which is something I cannot do with anything else. The effort from
> scores of people over ~40 years as well as the continued effort shows. I
> can't imagine so much effort or such an enduring project.
>
> But as I've said this behaviour (of Emacs) ruins it for me and I don't
> think I'll ever be able to get over it so at this juncture I'd rather
> help contribute and improve Emacs for myself and others and I hope
> that's something this email can be the genesis of.
>
>
> Regards,
> Jordan
>
>

[-- Attachment #2: Type: text/html, Size: 8718 bytes --]

  parent reply	other threads:[~2024-10-20 21:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-20 18:46 Emacs graphical frontends / responsiveness Jordan Ellis Coppard
2024-10-20 19:11 ` Corwin Brust
2024-10-20 19:30 ` Eli Zaretskii
2024-10-20 19:39 ` Suhail Singh
2024-10-20 21:49 ` Ship Mints [this message]
2024-10-21  1:39 ` Sean Whitton

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to='CAN+1Hbqb9q6LBpjhzheSxo4ssGiYjqEb8j0S26=DgQOMrMd=ZQ@mail.gmail.com' \
    --to=shipmints@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=jc+o.emacs@wz.ht \
    /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.savannah.gnu.org/cgit/emacs.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).