]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/package.el: Byte compile the quickstart file
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 18 Dec 2020 15:02:15 +0000 (10:02 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 18 Dec 2020 15:02:15 +0000 (10:02 -0500)
Earlier tests had found problems when byte-compiling the file,
but later investigations indicated the problem was not
directly related.  The performance difference is appreciable.

(package-quickstart-refresh): Byte compile the file.
(package-activate-all): Load byte-compiled version if available.
(package--quickstart-maybe-refresh): Delete the byte-compiled file as well.

lisp/emacs-lisp/package.el

index b7c48dfd3f5c24fe4f3b086008b3f5de5446f36e..f6ad6d2ebc7a7f207486d43f5667496a298d2924 100644 (file)
@@ -1615,18 +1615,22 @@ that code in the early init-file."
   "Activate all installed packages.
 The variable `package-load-list' controls which packages to load."
   (setq package--activated t)
-  (if (file-readable-p package-quickstart-file)
-      ;; Skip load-source-file-function which would slow us down by a factor
-      ;; 2 (this assumes we were careful to save this file so it doesn't need
-      ;; any decoding).
-      (let ((load-source-file-function nil))
-        (load package-quickstart-file nil 'nomessage))
-    (dolist (elt (package--alist))
-      (condition-case err
-          (package-activate (car elt))
-        ;; Don't let failure of activation of a package arbitrarily stop
-        ;; activation of further packages.
-        (error (message "%s" (error-message-string err)))))))
+  (let* ((elc (concat package-quickstart-file "c"))
+         (qs (if (file-readable-p elc) elc
+               (if (file-readable-p package-quickstart-file)
+                   package-quickstart-file))))
+    (if qs
+        ;; Skip load-source-file-function which would slow us down by a factor
+        ;; 2 when loading the .el file (this assumes we were careful to
+        ;; save this file so it doesn't need any decoding).
+        (let ((load-source-file-function nil))
+          (load qs nil 'nomessage))
+      (dolist (elt (package--alist))
+        (condition-case err
+            (package-activate (car elt))
+          ;; Don't let failure of activation of a package arbitrarily stop
+          ;; activation of further packages.
+          (error (message "%s" (error-message-string err))))))))
 \f
 ;;;; Populating `package-archive-contents' from archives
 ;; This subsection populates the variables listed above from the
@@ -4041,6 +4045,7 @@ activations need to be changed, such as when `package-load-list' is modified."
       ;; FIXME: Delay refresh in case we're installing/deleting
       ;; several packages!
       (package-quickstart-refresh)
+    (delete-file (concat package-quickstart-file "c"))
     (delete-file package-quickstart-file)))
 
 (defun package-quickstart-refresh ()
@@ -4098,7 +4103,8 @@ activations need to be changed, such as when `package-load-list' is modified."
 ;;\sno-byte-compile: t
 ;; no-update-autoloads: t
 ;; End:
-"))))
+"))
+    (byte-compile-file package-quickstart-file)))
 
 (defun package--imenu-prev-index-position-function ()
   "Move point to previous line in package-menu buffer.