[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#12796: Optimize `ido-completing-read' for larger lists with flex mat
From: |
Dmitry Gutov |
Subject: |
bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled |
Date: |
Thu, 08 Nov 2012 08:29:19 +0400 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 |
On 08.11.2012 6:05, Stefan Monnier wrote:
- (setq re (mapconcat #'regexp-quote (split-string ido-text "") ".*"))
+ (setq re (mapconcat #'regexp-quote (split-string ido-text "" t)
".*"))
Sounds like a good change. Tho:
(mapconcat (lambda (c) (regexp-quote (string c))) ido-text ".*")
would work as well.
Indeed. A two-character change offering massive speedup looks cuter,
though. And easier to understand for casual readers.
You could try to speed up the regexp matching some more by eliminating
backtracking (which should mostly eliminate a few pathological cases):
(let ((first t))
(mapconcat (lambda (c)
(if first
(progn (setq first nil) (regexp-quote (string c)))
(concat "[^" (string c) "]*"
(regexp-quote (string c)))))
ido-text ""))
Yep, this adds some further speedup especially with longer string.
To use the existing testing setup (numbers are a bit different in this
session):
;; omt 18000 15 abcdefghzzzzz 0.042
;; nbt 18000 15 abcdefghzzzzz 0.040
;; omt 18000 45 abcdefghzzz123 0.127
;; nbt 18000 45 abcdefghzzz123 0.087
I'm still going to see if I can make while-no-input work here, though.
Yes, that'd be very welcome.
I sent a patch that doesn't seem to break anything for me:
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12796#41
But in the light of the above numbers, it seems that (while-no-input)
would almost always guard a section of code that takes 1/20th of a
second to run, or less. Only useful when a user has floored "backspace",
I think.
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, (continued)
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/08
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/08
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/10
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/10
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/10
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/10
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled,
Dmitry Gutov <=