Ihor Radchenko <[email protected]> writes:
> Doerthous <[email protected]> writes:
>
>> For getting properties of an org entry by ID, I currently (org 9.7) use
>> (org-entry-get (org-id-find ID t) PROP), but `org-id-find' seems too
>> slow. So I wonder this there any recommended ways to do this job?
>>
>> or, maybe we can cache also the marker returned by `org-id-find' in
>> `org-id-locations'?
>
> May you show profiler report detailing what exactly is slow?
> You can save the profile with M-x profiler-report-write-profile from the
> report buffer.
Hi Ihor,
Sorry for the late reply.
I actually done a performance test that day with the following block:
#+begin_src emacs-lisp :cache yes :exports both
(with-temp-buffer
(concat
(x/elp-test-helper `(org-id-find org-entry-get x/org-id-prop)
(dotimes (i 1000)
;; Org-way for retrieve entry property by id:
(org-entry-get
(org-id-find '757fe0d4-1f77-46d8-bb84-fa0eefd1f9e0 t) "ID")
;; A hash table implementation, mapping ID to an other property
;; hashtable:
(x/org-id-prop "ID" '757fe0d4-1f77-46d8-bb84-fa0eefd1f9e0)))))
#+end_src
#+RESULTS:
: org-id-find 1000 6.4504779999 0.0064504779
: org-entry-get 1000 0.0776989999 7.769...e-05
: x/org-id-prop 1000 0.0090050000 9.005...e-06
BTW, let me just demonstrate my motivation for this.
My org notes currently are organized by ID property, and I got a
requirement for retrieving the note's properties by ID. The note
property contains not only those in the property drawer, but also
some special properties computed from the note's content. So I have
to use a nested hashtable to do my job and update those properties
cache manually.
When I was on Org 9.6, the org-entry-get API took POM as its input.
And recently I found it now supports ELE, which is an org-element
parsed node. And the org-element package also introduces some new
APIs, like org-element-cache-store-key. So I'm trying to use these
features to refactor my code to reuse the org-element-cache.
But sadly, as you can see, the test results show that org-entry-get
is still slow than a pure hashtable implementation, even if the
return marker of org-id-find is cached in org-id-locations.