Pregunta : ¿Por qué la org-map-entriescoincidencia de propiedades es tan lenta y qué puedo hacer para acelerarla?
Antecedentes : tengo un uso relativamente simple para org-map-entries: tomar el esfuerzo (en minutos enteros) de todas las entradas de la agenda de la organización con etiqueta goaly una prioridad dada (por ejemplo B).
(org-map-entries
#'hw-org-get-effort-in-minutes
"goal+PRIORITY=\"B\""
'agenda)
Esto es terriblemente lento, toma más de un minuto para mi archivo de agenda de ~ 12k líneas.
Sin embargo, si elimino el PRIORITYfiltro para goalsque se seleccione cualquier elemento etiquetado, se completa casi al instante.
También puedo configurar filtros como goal/DONEy se completan muy rápidamente, pero si hago algo así goals+EFFORT>0, volveremos a tomar más de un minuto. Parece que las propiedades en general son muy lentas para igualar.
Encontré una solución alternativa : puedo hacer coincidir propiedades dentro de la función asignada muy rápidamente usando org-entry-get. Cuando hago esto, la ejecución es menos de un segundo. Esto parece una tontería, espero que haya una mejor manera, ¡pero al menos funciona!
Ya lo intenté : desde que (benchmark 1000 (hw-org-effort-to-minutes "1:20"))regresa "Elapsed time: 0.000019s", no creo que mi función contribuya mucho.
De acuerdo con profiler, ~ 40% del tiempo de CPU es utilizado por cond, con ~ 29% proveniente del análisis de elementos ( org-element--current-element). Las siguientes dos contribuciones más grandes en general son 14% y 13%, por lo que el 40% condparece ser la mayor parte del problema. No estoy seguro de por qué el análisis de elementos se haría con más frecuencia con los emparejadores de propiedades, a menos que la diferencia provenga de analizar solo el encabezado (etiquetas, TODO) frente al encabezado + cuerpo (propiedades).
fuente
