emacs-devel
[Top][All Lists]
Advanced

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

Re: master 979308b4ca 5/9: org-export-data: Concatenate strings in tempo


From: Ihor Radchenko
Subject: Re: master 979308b4ca 5/9: org-export-data: Concatenate strings in temporary buffer for performance
Date: Thu, 16 Jun 2022 20:49:27 +0800

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Eli Zaretskii [2022-06-16 04:09:44] wrote:
>>     org-export-data: Concatenate strings in temporary buffer for performance
>>     
>>     * lisp/org/ox.el (org-export-data): Use temporary buffer to collect 
>> export
>>     data instead of `mapconcat'.  Using buffer puts less load on garbage
>>     collector.
>
> AFAICT this just replaces `mapconcat` with a `with-temp-buffer + dolist
> + insert`, so if this makes a significant performance difference, it
> points to a performance problem in our `mapconcat`, right?

I hope that I did not get it wrong. I _believe_ that I did see an
improvement. So, you better check if it makes a difference on your side
if you revert that patch (especially with un-optimized build where the
differences should be more prominent).

AFAIK, there are several caveats with `mapconcat':
1. The way it was used in Org before the patch was
   (mapconcat #function sequence "")
   Here, `mapconcat' will call `concat' to generate the new string with 2N
   number of arguments. Half of the arguments will be "".

2. `concat' is doing ad-hoc save/restore of text properties. IDK if it
   matters in this particular case, but buffers should work more
   efficiently with handling text properties (AFAIK)

3. `concat' tries to consider non-string argument adding some (probably
   small) extra overheads.

Best,
Ihor



reply via email to

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