Pertanyaan : Mengapa org-map-entriespencocokan properti sangat lambat, dan apa yang bisa saya lakukan untuk mempercepatnya?
Latar belakang : Saya memiliki penggunaan yang relatif sederhana untuk org-map-entries: ambil upaya (dalam menit integer) dari semua entri agenda org dengan tag goaldan prioritas yang diberikan (misalnya B).
(org-map-entries
#'hw-org-get-effort-in-minutes
"goal+PRIORITY=\"B\""
'agenda)
Ini sangat lambat, mengambil lebih dari satu menit untuk file agenda baris ~ 12k saya.
Namun, jika saya menghapus PRIORITYdari filter sehingga setiap goalsitem yang ditandai dipilih, itu menyelesaikan hampir secara instan.
Saya juga dapat mengatur filter seperti goal/DONEdan mereka selesai dengan sangat cepat, tetapi jika saya melakukan sesuatu seperti goals+EFFORT>0kita kembali mengambil alih satu menit. Tampaknya properti pada umumnya sangat lambat untuk dicocokkan.
Saya menemukan solusi curang : Saya dapat mencocokkan properti di dalam fungsi yang dipetakan dengan sangat cepat org-entry-get. Ketika saya melakukan ini, eksekusi kurang dari satu detik. Ini kelihatannya konyol, semoga ada cara yang lebih baik, tapi setidaknya berhasil!
Sudah mencoba : Sejak (benchmark 1000 (hw-org-effort-to-minutes "1:20"))kembali "Elapsed time: 0.000019s", saya tidak berpikir fungsi saya berkontribusi banyak.
Menurut profiler, ~ 40% dari waktu CPU digunakan oleh cond, dengan ~ 29% berasal dari elemen parsing ( org-element--current-element). Dua kontribusi terbesar berikutnya secara keseluruhan adalah 14% dan 13%, sehingga 40% dari condtampaknya menjadi bagian terbesar dari masalah. Tidak yakin mengapa elemen parsing akan dilakukan lebih sering dengan pencocokan properti, kecuali perbedaannya berasal dari parsing hanya header (tag, TODO) vs header + tubuh (properti).