Gnus development mailing list
 help / color / mirror / Atom feed
From: Dan Christensen <jdc@uwo.ca>
To: ding@gnus.org
Subject: Re: Improving Gnus speed
Date: Sun, 21 Nov 2010 15:42:44 -0500	[thread overview]
Message-ID: <871v6el86z.fsf@uwo.ca> (raw)
In-Reply-To: <m3eiafuta0.fsf@quimbies.gnus.org>

Lars Magne Ingebrigtsen <larsi@gnus.org> writes:

> Dan Christensen <jdc@uwo.ca> writes:
>
>> Separate from that low-level cache, the sorting function could
>> probably annotate the thread tree and re-use that information
>> for all of the recursive sorts.  Or use a decorate-sort-undecorate
>> pattern. 
>
> It sounds possible, but peeking at the code, it doesn't seem trivial to
> do generally, since the user can compose their own composited sorting
> functions.  So the cache would have to be per
> article+sorting-function...  hm...

Re: caching:

I think caching mainly makes sense for the functions which require
traversing the thread tree: gnus-thread-sort-by-total-score and
gnus-thread-sort-by-most-recent-number and -date.  Are there
any others?  If these tucked away their result when called,
I imagine there would be a big savings.  Depending on the shape
of the tree, this would reduce sort key computation time from
somewhere between O(n log n) and O(n^2) to O(n).

Re: decorate-sort-undecorate (DSU):

Here for each article you create a key which is a list of the relevant
values.  For example, if the sort functions are

           '((not gnus-thread-sort-by-number)
             gnus-thread-sort-by-score))

then the key would be (-number score) [or maybe the reverse].  Then you
replace the list of threads with a list of pairs (key thread) and sort
on the keys.  This avoids recomputing the key each time an article needs
to be compared with another, which would reduce overhead a lot.  After
sorting, you make a pass through to extract the list of threads in
sorted order.

When computing the keys, if you traverse the threads from leaves to the
root, you can compute the keys quickly without needing to implement the
caching.

But I don't know what to do if the user implements their own sorting
function.  It would be easier if the interface was changed: instead
of providing a list of comparison functions, you provide a list of
functions which compute key values which are then compared using
the default emacs order.  Then we could always use DSU.  But maybe
it's not worth changing the interface for this?

Options:

(a) Try caching, and see if it is good enough.
(b) Use DSU when only built-in sort functions are used, and fall
back to existing behaviour?  (Complicates code to have a fall-back,
and also would have to assume that the user didn't redefine the
built-in functions.)
(c) Change the interface so DSU can always be used?

Dan




  reply	other threads:[~2010-11-21 20:42 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-09 12:35 Francis Moreau
2010-11-09 13:45 ` Didier Verna
2010-11-09 13:55   ` Francis Moreau
2010-11-09 14:00     ` Knut Anders Hatlen
2010-11-09 14:22       ` Steinar Bang
2010-11-09 14:29       ` Francis Moreau
2010-11-09 14:49         ` Richard Riley
2010-11-09 16:37           ` Didier Verna
2010-11-09 16:51             ` Richard Riley
2010-11-09 16:56               ` Steinar Bang
2010-11-09 17:12                 ` Richard Riley
2010-11-09 17:48                   ` Steinar Bang
2010-11-09 18:59                     ` Adam Sjøgren
2010-11-09 19:17                       ` Steinar Bang
2010-11-09 19:06                     ` Richard Riley
2010-11-09 14:49     ` Didier Verna
2010-11-09 15:27       ` Richard Riley
2010-11-09 15:42         ` Francis Moreau
2010-11-09 16:35         ` Didier Verna
2010-11-09 16:49           ` Richard Riley
2010-11-09 19:52           ` Francis Moreau
2010-11-09 20:48             ` Richard Riley
2010-11-09 15:04     ` Adam Sjøgren
2010-11-09 18:55 ` Lars Magne Ingebrigtsen
2010-11-09 19:58   ` Francis Moreau
2010-11-09 21:03     ` Andreas Schwab
2010-11-09 21:49       ` Ted Zlatanov
2010-11-09 22:45         ` Richard Riley
2010-11-10  8:49           ` Francis Moreau
2010-11-10 10:31             ` Francis Moreau
2010-11-10  9:39           ` Julien Danjou
2010-11-10 13:26             ` Ted Zlatanov
2010-11-10 13:28               ` Julien Danjou
2010-11-10 14:12               ` Richard Riley
2010-11-10 17:40                 ` Andreas Schwab
2010-11-10 13:38       ` Francis Moreau
2010-11-09 21:27   ` Lars Magne Ingebrigtsen
2010-11-10 14:16   ` Francis Moreau
2010-11-10 18:20     ` Lars Magne Ingebrigtsen
2010-11-11  8:14       ` Francis Moreau
2010-11-11 18:34         ` Lars Magne Ingebrigtsen
2010-11-11 19:54           ` Francis Moreau
2010-11-14 16:10             ` Lars Magne Ingebrigtsen
2010-11-15  9:40               ` Francis Moreau
2010-11-21  6:02                 ` Lars Magne Ingebrigtsen
2010-11-21 13:54                   ` Francis Moreau
2010-11-21 18:17                     ` Lars Magne Ingebrigtsen
2010-11-21 19:37                       ` Francis Moreau
2010-11-24 22:09                         ` Lars Magne Ingebrigtsen
2010-11-25  7:35                           ` Francis Moreau
2010-11-12 11:11       ` Francis Moreau
2010-11-14 16:11         ` Lars Magne Ingebrigtsen
2010-11-15  9:07           ` Francis Moreau
2010-11-21  5:44             ` Lars Magne Ingebrigtsen
2010-11-21 14:07               ` Francis Moreau
2010-11-10 18:21     ` Lars Magne Ingebrigtsen
2010-11-11  8:22       ` Francis Moreau
2010-11-11 18:33         ` Lars Magne Ingebrigtsen
2010-11-11 19:56           ` Francis Moreau
2010-11-14 16:10             ` Lars Magne Ingebrigtsen
2010-11-12 18:55     ` Dan Christensen
2010-11-12 20:07       ` Francis Moreau
2010-11-12 21:38         ` Dan Christensen
2010-11-13 20:46           ` Francis Moreau
2010-11-14  9:32             ` Francis Moreau
2010-11-29  0:40               ` Dan Christensen
2010-11-29  4:47                 ` Lars Magne Ingebrigtsen
2010-11-29  6:01                   ` Miles Bader
2010-11-29  6:18                     ` Lars Magne Ingebrigtsen
2010-11-29  6:36                       ` Lars Magne Ingebrigtsen
2010-11-29  6:40                       ` Daniel Pittman
2010-11-29  8:27                 ` Francis Moreau
2010-11-29 19:30                   ` Dan Christensen
2010-11-29 20:10                     ` Francis Moreau
2010-11-29 20:23                       ` Dan Christensen
2010-11-29 20:56                         ` Francis Moreau
2010-11-29 21:30                           ` Dan Christensen
2010-12-05 15:01                             ` Lars Magne Ingebrigtsen
2010-12-05 18:05                               ` Dan Christensen
2010-12-05 18:46                                 ` Lars Magne Ingebrigtsen
2010-11-14 16:13             ` Lars Magne Ingebrigtsen
2010-11-15  9:03               ` Francis Moreau
2010-11-21  5:43                 ` Lars Magne Ingebrigtsen
2010-11-21 14:39                   ` Francis Moreau
2010-11-14 16:14           ` Lars Magne Ingebrigtsen
2010-11-14 18:10             ` Dan Christensen
2010-11-14 18:26               ` Lars Magne Ingebrigtsen
2010-11-14 21:27                 ` Dan Christensen
2010-11-21  5:42                   ` Lars Magne Ingebrigtsen
2010-11-21 20:42                     ` Dan Christensen [this message]
2010-11-21 21:46                       ` Francis Moreau
2010-11-21 22:52                         ` Dan Christensen
2010-11-22  7:57                           ` Francis Moreau
2010-11-24 22:11                       ` Lars Magne Ingebrigtsen
2010-11-29  0:29                       ` Dan Christensen
2010-11-29  4:41                         ` Lars Magne Ingebrigtsen
2010-11-29 20:17                           ` Dan Christensen
2010-12-05 15:00                             ` Date parser in C (was: Improving Gnus speed) Lars Magne Ingebrigtsen
2010-12-05 17:27                               ` Andreas Schwab
2010-12-05 17:38                                 ` Date parser in C Lars Magne Ingebrigtsen
2010-11-09 21:47 ` Improving Gnus speed Ted Zlatanov
2010-11-09 22:55   ` Steinar Bang
2010-11-10  4:27 ` Eden Cardim

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=871v6el86z.fsf@uwo.ca \
    --to=jdc@uwo.ca \
    --cc=ding@gnus.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.
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).