[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Bug: performance issue in org-font-lock-add-priority-faces related to or

From: Tim Frana
Subject: Bug: performance issue in org-font-lock-add-priority-faces related to org-priority-regexp [9.4 (9.4-7-g3eccc5-elpaplus @ /home/standard/.emacs.d/elpa/26.3/develop/org-plus-contrib-20200921/)]
Date: Wed, 7 Oct 2020 23:09:40 +0200

Apologies, the extreme slowdown for the regex in my setup is mostly credited to a very long line in my org file (~100k characters). I inserted a snippet from a log file to a quote block, without realizing that a large base64 string was hiding at the end of one line. The old regex could exclude that line early on, because it wasn't a header line, so I didn't notice a performance hit back then.

With that line deleted (org file shrinks to ~300KB), I measured performance with the new and old regex (new on 1st line vs old on 2nd line):

(elp-instrument-function 'org-font-lock-add-priority-faces)
;; open org file

     Function Name                     Call Count  Elapsed Time Average Time
new: org-font-lock-add-priority-faces  28          0.0228787000 0.0008170964
old: org-font-lock-add-priority-faces  28          0.0007937999 2.834...e-05

So the new one is still considerably slower, but probably not noticeable unless the file is really large and/or it contains long lines.

One last remark, my workaround from the last mail is flawed, e.g. it broke priority sorting in my agendas. This one worked better:

(defun adv--org-font-lock-add-priority-faces (wrapped-func &rest args)
  (let ((org-priority-regexp "^\\*+ .*?\\(\\[#\\([A-Z0-9]+\\)\\] ?\\)"))
    (apply wrapped-func args)))
(advice-add 'org-font-lock-add-priority-faces :around #'adv--org-font-lock-add-priority-faces)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]