On 10/07/2021 22:47, Maxim Nikulin wrote:
It is rather annoying that C-c C-x p `org-set-property' may be quite
slow if a file is large enough. (I do not consider it huge however.)
There is noticeable delay before the prompt for property name appears in
minibuffer. Accidentally I have noticed that sometimes it is fast.
Problem appears after first jump using C-u C-c C-j `org-goto'. Actually
a jump is not required, it is enough to get jump (refile) targets.
It is strange. Merely 3500 markers created by org-refile-cache in 2.2Mb
file ruin performance of regexps in that buffer. I would expect either
no influence of markers at all since search is a read-only operation or
some negligible penalty proportional to fraction of markers in relation
to total amount of characters.
Look at the numbers for nm-test that is just some regexp searches from
`org-buffer-property-keys'. Performance is restored after clearing of
the cache.
#+begin_src elisp
(defun nm-tst ()
(org-with-wide-buffer
(goto-char (point-min))
(while (re-search-forward org-property-start-re nil t)
(org-get-property-block)
(outline-next-heading))
nil))
(org-refile-cache-clear)
(let ((org-refile-targets '((nil :maxlevel . 6)))
(org-refile-use-outline-path 'file)
(org-refile-use-cache t)
(iters 10))
(cons
(list (org-version))
(mapcar (lambda (f)
(append (list f) (benchmark-run iters (funcall f))))
(list #'nm-tst ; #'org-buffer-property-keys
#'org-refile-get-targets
#'nm-tst ; #'org-buffer-property-keys
#'org-refile-cache-clear
#'nm-tst))))
#+end_src
#+RESULTS:
| 9.4.6 | | | |
| nm-tst | 0.044981942 | 0 | 0.0 |
| org-refile-get-targets | 1.748572638 | 8 | 0.3876601379999993 |
| nm-tst | 0.393022201 | 0 | 0.0 |
| org-refile-cache-clear | 0.001787078 | 0 | 0.0 |
| nm-tst | 0.035731803 | 0 | 0.0 |
It seems, it is better to drop org-refile-cache completely. It has some
design problems making it rather fragile. At the same time a patch can
be applied that improves performance of `org-refile-get-targets' by a
factor of at least 2 for (org-refile-use-outline-path 'file).
Emacs-26.3