emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] long code blocks making Org Mode very slow


From: Nick Dokos
Subject: Re: [O] long code blocks making Org Mode very slow
Date: Wed, 22 Jul 2015 08:41:23 -0400
User-agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/25.0.50 (gnu/linux)

Angus M <address@hidden> writes:

>> When I have the cursor inside of the code block for the code, moving
>> up or done one line or one page takes 2-3 seconds.
>> Grant Rettke
>> --
>
> Thanks for confirming that you also experience the slow-down.
>
> I think that the only way to remedy this is to modify the
> 'org-src-font-lock-fontify-block' function in org-src.el to allow
> just-in-time fontification, (rather than the current complete
> re-fontification of the whole code block upon any changes).
>

I'm not convinced that this is the reason. I tried with a simple file
(a headline, some text, a source code block with 7K lines of python -
the decimal.py file from the standard python library - and some more
text).

I set org-src-fontify-natively to nil (through a local variable in
the file). Adding text after the code block was OK but adding text
before the code block was very slow. If fontification were the problem,
I'd expect both to be fast.

I did a profile with elp and it seems to me that the problem is footnote
detection:

--8<---------------cut here---------------start------------->8---
org-activate-footnote-links                                   7           
13.397064245  1.9138663207
org-footnote-next-reference-or-definition                     7           
13.396982566  1.9138546524
org-footnote-in-valid-context-p                               378         
13.384084804  0.0354076317
org-in-block-p                                                322         
13.146482877  0.0408275865
org-between-regexps-p                                         2576        
12.544080215  0.0048695963
org-footnote-at-reference-p                                   189         
6.7601071689  0.0357677627
org-footnote-at-definition-p                                  189         
6.6263815400  0.0350602197
org-element--parse-to                                         15          
0.41858634    0.027905756
org-element--cache-sync                                       18          
0.3965463360  0.0220303520
org-fontify-meta-lines-and-blocks                             14          
0.3946110120  0.0281865008
org-fontify-meta-lines-and-blocks-1                           14          
0.3944775729  0.0281769695
org-element--current-element                                  7           
0.3642047120  0.0520292445
...
--8<---------------cut here---------------end--------------->8---

I didn't check how org-between-regexps-p and org-footnote-at-*-p are
related, but those three seem to account for the lion's share of the
time.

BTW, org-src-font-lock-fontify-block calls font-lock-fontify-buffer
which is not supposed to be called from lisp programs: the doc string
suggests using font-lock-ensure or font-lock-flush. I tried the first
but it did not make any difference in the speed. But I guess it should
be changed.

-- 
Nick




reply via email to

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