Byte compiled elisp files will load faster, and also run faster. (by a simple test of a loop, it seems to run about 6 times faster.)
As of today (2013), for init files and light-weight packages, byte compile doesn't make any noticeable speed difference. In general, you should byte-compile lisp package. (example of heavy weight packages that need or must be byte-compiled: js2-mode, nxml-mode, auto-complete-mode.)
If you want emacs to load the byte compiled file if it exists, you should not include the “.el” suffix. ⁖ do it like this
〔☛ Emacs Lisp's Library System: What's require, load, load-file, autoload, feature?〕
There are several ways to byte compile elisp files. The simplest and most useful are:
byte-compile-file, it'll prompt for a file name.
dired-mark-files-regexp【% m】 on “.el” files, then call
here's elisp code that lets you batch byte compile all elisp files in current dir and subdir.
;; batch byte compile of all elisp (.el) files in a dir and subdirs (require 'find-lisp) (mapc (lambda (x) (byte-compile-file x)) (find-lisp-find-files (expand-file-name (concat (file-name-directory (or load-file-name buffer-file-name)) default-directory)) "\\.el$"))
Save above in a file, then run it by calling
# byte compile emacs lisp files of current dir emacs -batch -f batch-byte-compile *.el
On problem with compiling init files is this: if you edit a file, you need to remember to compile it again, else emacs will just load the compiled version that doesn't have your changes.
Here's code to make emacs automatically byte-compile elisp when it is saved, but only when byte-compiled file already exists. Put the following in your emacs init file.
(defun byte-compile-current-buffer () "`byte-compile' current buffer if it's emacs-lisp-mode and compiled file exists." (interactive) (when (and (eq major-mode 'emacs-lisp-mode) (file-exists-p (byte-compile-dest-file buffer-file-name))) (byte-compile-file buffer-file-name))) (add-hook 'after-save-hook 'byte-compile-current-buffer)
thanks to Adolfo Benedetti for