Câu hỏi : Tại sao org-map-entries
khớp tài sản quá chậm và tôi có thể làm gì để tăng tốc?
Bối cảnh : Tôi có một cách sử dụng tương đối đơn giản để org-map-entries
: lấy nỗ lực (tính bằng số phút) từ tất cả các mục nhập chương trình nghị sự với thẻ goal
và mức độ ưu tiên nhất định (ví dụ B
).
(org-map-entries
#'hw-org-get-effort-in-minutes
"goal+PRIORITY=\"B\""
'agenda)
Điều này cực kỳ chậm, mất hơn một phút cho tệp chương trình nghị sự ~ 12k của tôi.
Tuy nhiên, nếu tôi loại bỏ PRIORITY
khỏi bộ lọc để bất kỳ goals
mục được gắn thẻ nào được chọn, nó sẽ hoàn thành gần như ngay lập tức.
Tôi cũng có thể thiết lập các bộ lọc như thế goal/DONE
và chúng hoàn thành rất nhanh, nhưng nếu tôi làm điều gì đó như goals+EFFORT>0
chúng tôi sẽ quay lại mất hơn một phút. Có vẻ như tài sản nói chung là rất chậm để phù hợp.
Tôi tìm thấy một cách giải quyết gian lận : Tôi có thể khớp các thuộc tính bên trong hàm được ánh xạ rất nhanh bằng cách sử dụng org-entry-get
. Khi tôi làm điều này, thực thi là ít hơn một giây. Điều này có vẻ ngớ ngẩn, hy vọng có một cách tốt hơn, nhưng ít nhất nó hoạt động!
Đã thử : Kể từ khi (benchmark 1000 (hw-org-effort-to-minutes "1:20"))
trả về "Elapsed time: 0.000019s"
, tôi không nghĩ chức năng của mình đóng góp nhiều.
Theo đó profiler
, ~ 40% thời gian CPU được sử dụng bởi cond
, với ~ 29% đến từ phân tích cú pháp phần tử ( org-element--current-element
). Hai đóng góp lớn nhất tiếp theo nói chung là 14% và 13%, vì vậy 40% cond
dường như là phần lớn của vấn đề. Không chắc chắn tại sao phân tích cú pháp phần tử sẽ được thực hiện thường xuyên hơn với các trình so khớp thuộc tính, trừ khi sự khác biệt đến từ việc phân tích cú pháp chỉ tiêu đề (thẻ, TODO) so với tiêu đề + cơ thể (thuộc tính).