除了@Malabara的答案外,我还倾向于使用定制的with-timer
宏来永久检测代码的各个部分(例如,init.el
文件)。
区别在于,尽管benchmark
可以研究所检测代码的特定位的性能,但with-timer
始终可以为您花费在代码的每个已检测部分上的时间(对于足够大的部分,无需太多开销),这使您可以了解输入哪一部分应该进一步研究。
(defmacro with-timer (title &rest forms)
"Run the given FORMS, counting the elapsed time.
A message including the given TITLE and the corresponding elapsed
time is displayed."
(declare (indent 1))
(let ((nowvar (make-symbol "now"))
(body `(progn ,@forms)))
`(let ((,nowvar (current-time)))
(message "%s..." ,title)
(prog1 ,body
(let ((elapsed
(float-time (time-subtract (current-time) ,nowvar))))
(message "%s... done (%.3fs)" ,title elapsed))))))
使用示例:
(with-timer "Doing things"
(form (to (be evaluated))))
在*Messages*
缓冲区中产生以下输出:
Doing things... done (0.047s)
我应该提到的是,乔恩·韦格利(Jon Wiegley)use-package-with-elapsed-timer
出色的演绎极大地激发了他的灵感use-package
。