emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Adam Porter <adam@alphapapa.net>
To: emacs-orgmode@gnu.org
Subject: Re: [Orgmode] Slow speed of week and month views
Date: Fri, 04 Aug 2017 22:07:55 -0500	[thread overview]
Message-ID: <878tiyr9tg.fsf@alphapapa.net> (raw)
In-Reply-To: 87efsre565.fsf@grothesque.org

Christoph Groth <christoph@grothesque.org> writes:

> Carsten Dominik wrote in 2010:
>
>> I am afraid I don't see any major speed improvements that could make
>> this happen. Yes, one could parse all the files once, build a table
>> in memory and get the entries for each day from there - 
>> but that comes down to a complete rewrite of the parser, maybe even
>> to switching to an internal representation model for Org-mode.
>
>> I don't see that happening, I am afraid.

Wow, you must have done some digging to find that, Christoph.  :)

> Computing the agenda month view takes 20 seconds in my case. That's
> perhaps the most serious problem with orgmode as I (and I suppose
> others as well) use it.  It would be great if this issue could be
> solved after all.
>
> Would it be really so difficult to do?  The actual parsing seems to be
> done in the function org-agenda-get-day-entries as called by
> org-agenda-list.  Inside org-agenda-get-day-entries the crucial bit
> seems to be (org-agenda-today-p date).  If that bit got replaced by
> something that matches more than a single day, wouldn't this mostly do
> the trick?
>
> This is much easier than "rewriting the parser", so it seems that I'm
> overlooking some problems.

I think Carsten is correct that it would require significant new code.
I looked at the code you mentioned, but I think you missed the bigger
structure.  org-agenda-list first builds a list of day numbers from the
span that is set, then it calls org-agenda-get-day-entries for each day
number.

The (org-agenda-today-p date) form in org-agenda-get-day-entries is only
checked when the function is getting TODO items, and then it calls
org-agenda-get-todos to actually get the entries.  And as far as I can
tell, org-agenda-list doesn't set the :todo selector at all, so the
org-agenda-get-todos function isn't called when building a time-based
agenda view; instead it's called for the org-todo-list command.  This
seems to be confirmed by the docstring for org-agenda-entry-types, which
doesn't indicate that :todo is allowed as a type for daily/weekly
agendas.

I'm not as expert as Carsten or any of the current maintainers, but a
possible way to speed up agenda creation for longer time spans would be
to avoid parsing files repeatedly.  IIUC they are parsed once for every
date shown in the agenda.  Instead, if they were parsed once and
returned a list of items that was filtered or grouped once, that would
probably be faster.

But doing that would, as Carsten said, require rewriting a lot of code.
Essentially you'd be creating a new agenda system, so you'd have to
reimplement a lot of existing code.  You could do it in parallel, rather
than replacing existing code, so you wouldn't have to break the existing
agenda system.  But I don't think there's any way to shortcut writing
the new system.  I don't think there's any "low hanging fruit."

Anyway, something based on org-map-entries might be interesting, but
it's hard to say if it would actually be faster in the end.

  reply	other threads:[~2017-08-05  3:08 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-04 15:14 [Orgmode] Slow speed of week and month views Christoph Groth
2017-08-05  3:07 ` Adam Porter [this message]
2017-08-05 21:09   ` Karl Voit
2017-08-05 22:17     ` John Kitchin
2017-08-05 22:33       ` Nicolas Goaziou
2017-08-06  2:28       ` [Orgmode] " Tim Cross
2017-08-06  2:36       ` Adam Porter
2017-08-06  7:54       ` Karl Voit
2017-08-06 13:47         ` John Kitchin
2017-08-05 22:35     ` Nicolas Goaziou
2017-08-06  8:00       ` Karl Voit
2017-08-06  8:15         ` Nicolas Goaziou
2017-08-06  9:01           ` Karl Voit
2017-08-06  9:13             ` Adam Porter
2017-08-06 10:03               ` Karl Voit
2017-08-06 10:28                 ` Adam Porter
2017-08-06  9:26             ` Nicolas Goaziou
2017-08-06 10:18               ` Karl Voit
2017-08-07 11:41                 ` Nicolas Goaziou

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.orgmode.org/

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

  git send-email \
    --in-reply-to=878tiyr9tg.fsf@alphapapa.net \
    --to=adam@alphapapa.net \
    --cc=emacs-orgmode@gnu.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.savannah.gnu.org/cgit/emacs/org-mode.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).