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の方が早いのかもしれない。