condとifのバイトンコンパイル後の速度

らしきものを調べてみた。下に書いたのをsiteinit.lに書いてバイトコンパイルして実行してみた。

(defun tester1()
  (interactive)
  (let ((st (get-internal-real-time)))

	(dotimes (i 10000)
	  (cond (*parenthesis-complete-off*
			 (add-hook '*post-command-hook* 'parenthesis-complete)
			 (setq *parenthesis-complete-off* nil)
			 (message "parenthesis-complete on"))
			(t
			 (delete-hook '*post-command-hook* 'parenthesis-complete)
			 (setq *parenthesis-complete-off* t)
			 (message "parenthesis-complete off")))
	  )
	(message "~D" (- (get-internal-real-time) st))))

(defun tester2()
  (interactive)
  (let ((st (get-internal-real-time)))

	(dotimes (i 10000)
	  (if *parenthesis-complete-off*
		  (progn
			(add-hook '*post-command-hook* 'parenthesis-complete)
			(setq *parenthesis-complete-off* nil)
			(message "parenthesis-complete on"))
		(progn
		  (delete-hook '*post-command-hook* 'parenthesis-complete)
		  (setq *parenthesis-complete-off* t)
		  (message "parenthesis-complete off")))
	  )
	(message "~D" (- (get-internal-real-time) st))))
結果
-tester1
7421
7390
7350

-tester2
7431
7370
7451

結果は全く同じと考えてもよさそう。バイトコンパイルすることが前提なら、NANRI さんの話の通り見やすい方を使えばよさそう。


さっき書いたのはダンプファイルができる前の速度だった様子。
以下さっき書いたの

  • tester1

13780
13239

  • tester2

8132
8182
一応、結果を見る限りでは自分のPCではifの方が早いのかもしれない。コンパイルする前よりは随分差が縮まっているので、ifを並べる数とかで変化があるかも。項目が少ない場合はifの方が早いのかもしれない。