In my current Emacs setup the org agenda takes a ridiculous amount of time to start up, up to 2 minutes. It happens both on Ubuntu and MacOS.
Version information:
Emacs:
GNU Emacs 27.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.18.9) of 2018-02-18
Orgmode:
Org mode version 9.1.6 (9.1.6-44-ge6f891-elpaplus @ /home/jx/.emacs.d/elpa/develop/org-plus-contrib-20180205/)
.I'm using Spacemacs' develop branch.
However, this problem happens on both Ubuntu 16.04 LTS and the latest MacOS. Actually it has persisted for a very long period of time so I doubt if it's related to any particular Emacs/Org version.
The only information I was able to gather from the Messages
buffer during start up is the following:
Using vacuous schema [2 times]
There is no ElDoc support in this buffer
Showing all blocks ... done
Using vacuous schema
I'm not sure why by starting up org agenda Emacs would have something to do with "ElDoc support" and "vacuous schema". It seems to me that those are something related to editing with some other programming languages instead of purely org mode.
Is there anything I configured wrong that I should try to improve? Are the above messages related to some #BEGIN_SRC
blocks in the org files included in the agenda list? I don't think I would ever need source code blocks when I'm viewing an agenda buffer. How can I speed up the startup process? Or is it simply that I have too many files as org-agenda-files
(currently dozens)? I'd think this amount of agenda files is still quite normal and there must be optimization that I can perform.
EDIT: I ran the elp profiling and here are the results:
Function Name, Call Count, Elapsed Time, Average Time
org-agenda 1 116.6048159 116.6048159
org-agenda-list 1 116.29427357 116.29427357
org-agenda-prepare 1 109.15345470 109.15345470
org-agenda-prepare-buffers 1 108.98258905 108.98258905
org-agenda-get-day-entries 1288 7.0089191339 0.0054417074
org-agenda-get-scheduled 1288 3.726361062 0.0028931374
org-agenda-get-deadlines 1288 2.1579713230 0.0016754435
org-agenda--timestamp-to-absolute 14544 1.1317418120 7.781...e-05
org-agenda-get-timestamps 1288 0.3673404320 0.0002852021
org-agenda-get-sexps 1288 0.3438970410 0.0002670008
org-agenda-get-restriction-and-command 1 0.310503975 0.310503975
org-agenda-get-blocks 1288 0.3083237900 0.0002393818
org-agenda-prepare-window 1 0.157091024 0.157091024
org-agenda-skip 8624 0.0781296389 9.059...e-06
org-agenda-files 49 0.026090686 0.0005324629
org-agenda-finalize 1 0.013325178 0.013325178
org-agenda-mode 1 0.009848546 0.009848546
org-agenda-finalize-entries 23 0.006178961 0.0002686504
org-agenda-today-p 2604 0.0061717839 2.370...e-06
org-agenda-skip-eval 16968 0.0052723920 3.107...e-07
org-agenda-highlight-todo 112 0.0039840550 3.557...e-05
org-agenda-format-item 112 0.0038309749 3.420...e-05
org-agenda-new-marker 208 0.0031529359 1.515...e-05
org-agenda-format-date-aligned 28 0.0007373120 2.633...e-05
org-agenda-add-time-grid-maybe 28 0.0003810809 1.361...e-05
org-agenda-fix-displayed-tags 112 0.000342384 3.057e-06
org-agenda-fontify-priorities 1 0.00018465 0.00018465
org-agenda-align-tags 1 0.000160119 0.000160119
org-agenda-get-day-face 28 0.000156385 5.585...e-06
org-agenda-get-category-icon 112 7.702...e-05 6.877...e-07
org-agenda-span-name 23 4.4484e-05 1.934...e-06
org-agenda-span-to-ndays 1 2.3496e-05 2.3496e-05
org-agenda-fit-window-to-buffer 1 2.0877e-05 2.0877e-05
org-agenda-time-of-day-to-ampm-maybe 21 1.124...e-05 5.353...e-07
org-agenda-set-mode-name 1 9.226e-06 9.226e-06
org-agenda-mark-header-line 1 8.774e-06 8.774e-06
org-agenda-reset-markers 1 4.829e-06 4.829e-06
org-agenda-deadline-face 4 4.761e-06 1.19025e-06
org-agenda-update-agenda-type 1 1.575e-06 1.575e-06
org-agenda-ndays-to-span 2 1.174e-06 5.87e-07
org-agenda-mark-clocking-task 1 7.16e-07 7.16e-07
org-agenda-use-sticky-p 1 5.02e-07 5.02e-07
Not sure if this says much though.
*Org Agenda*
. If you are usingorg-agenda-custom-commands
, you can comment out certain criteria to see which setting causes the most time consumption and then determine whether anything can be tweaked. Of course, multiple agenda/todo blocks rolled into just one agenda command can also cause additional time delay. A longer span of time and multiple entries in the org agenda files can also cost more time to search.