如何改善 自定义的 Org Mode 加载速度?

我使用的是自定义Org-mode代码仓库的版本。 在使用ESUP检测Emacs启动时间后,发现org-mode的加载占用了超多时间。 不知道各位有没有好的解决办法?

加载方式如下:

(if (not (file-exists-p "~/Code/Emacs/org-mode/lisp/"))
    (use-package org
      :pin org
      :ensure t
      :ensure org-plus-contrib
      :mode (("\\.org\\'" . org-mode)))
  
  ;; disable Emacs built-in Org Mode
  (delete (format "/usr/local/share/emacs/%s/lisp/org" emacs-version) load-path)
  (delete "/usr/share/emacs/site-lisp/org/" load-path)
  (use-package org
    :pin manual
    :load-path "~/Code/Emacs/org-mode/lisp/"
    :defer t
    :mode (("\\.org\\'" . org-mode))
    ;; load org before org-mode init files settings.
    :init (require 'org)
    ;; add source code version Org-mode Info into Emacs.
    (if (file-exists-p "~/Code/Emacs/org-mode/doc/org")
        (with-eval-after-load 'info
          (add-to-list 'Info-directory-list "~/Code/Emacs/org-mode/doc/")
          (info-initialize)))
    (use-package org-plus-contrib
      :pin manual
      :load-path "~/Code/Emacs/org-mode/contrib/lisp"
      :no-require t)))

以下是我使用 ESUP 检测加载包的占用时间输出内容:

Total User Startup Time: 39.555sec     Total Number of GC Pauses: 19     Total GC Time: 0.584sec

init-package.el:67  6.642sec   16%
(if (not (file-exists-p "~/Code/Emacs/org-mode/lisp/"))
    (use-package org
      :pin org
      :ensure t
      :ensure org-plus-contrib
      :mode (("\\.org\\'" . org-mode)))
  
  ;; disable Emacs built-in Org Mode
  (delete (format "/usr/local/share/emacs/%s/lisp/org" emacs-version) load-path)
  (delete "/usr/share/emacs/site-lisp/org/" load-path)
  (use-package org
    :pin manual
    :load-path "~/Code/Emacs/org-mode/lisp/"
    :defer t
    :mode (("\\.org\\'" . org-mode))
    ;; load org before org-mode init files settings.
    :init (require 'org)
    ;; add source code version Org-mode Info into Emacs.
    (if (file-exists-p "~/Code/Emacs/org-mode/doc/org")
        (with-eval-after-load 'info
          (add-to-list 'Info-directory-list "~/Code/Emacs/org-mode/doc/")
          (info-initialize)))
    (use-package org-plus-contrib
      :pin manual
      :load-path "~/Code/Emacs/org-mode/contrib/lisp"
      :no-require t)))

init-prog-lang-clojure.el:433  5.663sec   14%
(use-package clomacs
  :ensure t)

init-org-mode.el:25  2.450sec   6%
(require 'init-org-hyperlink)

init-org-mode.el:36  2.178sec   5%
(require 'init-org-agenda)

init-package.el:42  1.728sec   4%
(package-initialize)

init-org-mode.el:32  1.562sec   3%
(require 'init-org-babel)

init-prog-project.el:16  1.419sec   3%
(use-package projectile
  :ensure t
  :defer t
  :delight projectile-mode
  :commands (projectile-mode)
  :bind-keymap ("C-c p" . projectile-command-map)
  :custom ((projectile-completion-system 'ivy)
           (projectile-switch-project-action #'projectile-commander)
           (projectile-use-git-grep t)
           (projectile-create-missing-test-files t))
  :init (projectile-global-mode 1)
  (add-to-list 'display-buffer-alist '("^\\*Projectile Commander Help\\*" . (display-buffer-below-selected))))

init-emacs-pdf.el:102  1.141sec   2%
(use-package org-pdftools
  :ensure t
  :defer t
  :init (org-pdftools-setup-link))

init-emacs-pdf.el:81  0.942sec   2%
(use-package saveplace-pdf-view
  :ensure t
  :demand t
  :init (save-place-mode 1))

init-org-mode.el:33  0.896sec   2%
(require 'init-org-latex)

init-org-mode.el:44  0.840sec   2%
(require 'init-org-protocol)

init-emacs-buffer.el:25  0.691sec   1%
(use-package all-the-icons-ibuffer
  :ensure t
  :init (all-the-icons-ibuffer-mode))

init-tool-dictionary.el:116  0.499sec   1%
(use-package baidu-translate
  :ensure t
  :defer t
  :custom ((baidu-translate-appid (my/json-read-value my/account-file 'baidu-translate-appid))
           (baidu-translate-security (my/json-read-value my/account-file 'baidu-translate-security)))
  :commands (baidu-translate-zh-mark baidu-translate-zh-whole-buffer)
  :init (add-to-list 'display-buffer-alist '("^\\*baidu-translate\\*" . (display-buffer-below-selected))))

init-org-mode.el:49  0.475sec   1%
(require 'init-org-contacts)

init-tool-irc.el:11  0.397sec   1%
(use-package circe
  :ensure t
  :defer t
  :commands (circe)
  :custom ((circe-default-nick "stardiviner")
           (circe-network-options `(("Freenode"
                                     :user "stardiviner"
                                     :pass ,(my/json-read-value my/account-file 'irc)
                                     :use-tls t
                                     :channels ("#emacs"))))
           (circe-channels '("#emacs"))
           (circe-reduce-lurker-spam t)
           (circe-format-say "{nick:-10s} {body}") ; align nick names and messages.
           ;; spelling checking
           (lui-flyspell-p t)
           (lui-flyspell-alist '(("#hamburg" "german8") (".*" "american"))))
  :config
  (define-key circe-mode-map (kbd "C-c SPC") 'tracking-next-buffer)
  ;; words completion
  (defun my/circe-company-setup ()
    (my-company-add-backend-locally 'company-ispell))
  (add-hook 'circe-channel-mode-hook #'my/circe-company-setup)
  ;; auto use paste service for long single line.
  ;; (require 'lui-autopaste)
  ;; (add-hook 'circe-channel-mode-hook 'enable-lui-autopaste)
  ;; Logging
  (require 'lui-logging)
  (enable-lui-logging-globally)
  ;; track bar
  (enable-lui-track-bar))

init-tool-irc.el:11  0.397sec   1%
(use-package circe
  :ensure t
  :defer t
  :commands (circe)
  :custom ((circe-default-nick "stardiviner")
           (circe-network-options `(("Freenode"
                                     :user "stardiviner"
                                     :pass ,(my/json-read-value my/account-file 'irc)
                                     :use-tls t
                                     :channels ("#emacs"))))
           (circe-channels '("#emacs"))
           (circe-reduce-lurker-spam t)
           (circe-format-say "{nick:-10s} {body}") ; align nick names and messages.
           ;; spelling checking
           (lui-flyspell-p t)
           (lui-flyspell-alist '(("#hamburg" "german8") (".*" "american"))))
  :config
  (define-key circe-mode-map (kbd "C-c SPC") 'tracking-next-buffer)
  ;; words completion
  (defun my/circe-company-setup ()
    (my-company-add-backend-locally 'company-ispell))
  (add-hook 'circe-channel-mode-hook #'my/circe-company-setup)
  ;; auto use paste service for long single line.
  ;; (require 'lui-autopaste)
  ;; (add-hook 'circe-channel-mode-hook 'enable-lui-autopaste)
  ;; Logging
  (require 'lui-logging)
  (enable-lui-logging-globally)
  ;; track bar
  (enable-lui-track-bar))

init-org-mode.el:39  0.348sec   0%
(if (and (file-exists-p "~/org-publish/")
         (file-exists-p "~/Org/Website/"))
    (require 'init-org-publish))

init-prog-vcs.el:35  0.275sec   0%
(require 'init-prog-vcs-changelog)

init-package.el:56  0.271sec   0%
(eval-when-compile
  (require 'use-package))

init-prog-build-system.el:14  0.269sec   0%
(require 'init-cmake)

init-package.el:114  0.252sec   0%
(use-package quelpa-use-package
  :ensure t
  :demand t
  :commands (quelpa-upgrade quelpa-upgrade-all quelpa-self-upgrade)
  :custom ((quelpa-checkout-melpa-p nil)
           (quelpa-update-melpa-p nil)))

init-emacs-search.el:22  0.222sec   0%
(require 'init-emacs-search-engine)

init-org-mode.el:43  0.201sec   0%
(require 'init-org-attach)

init-prog-vcs.el:29  0.199sec   0%
(require 'init-prog-vcs-git)

init-DevOps.el:21  0.190sec   0%
(require 'init-container)

init-DevOps.el:21  0.190sec   0%
(require 'init-container)

init-org-mode.el:37  0.184sec   0%
(require 'init-org-project-management)

init-org-mode.el:27  0.184sec   0%
(require 'init-org-todo)

init-emacs-edit.el:10  0.179sec   0%
(require 'init-emacs-kill-ring)

init-emacs-theme.el:89  0.179sec   0%
(use-package one-themes
  ;; :quelpa (one-themes :fetcher github :repo "stardiviner/emacs-one-themes")
  :load-path "~/Code/Emacs/one-themes"
  :config (load-theme 'one-dark t))