Timing something once isn't very useful: let it run 10000 times
Putting the commands in a proc: (removing the inner puts
commands to eliminate the noisy output)
proc time_it {n} {
# bracing the command
puts [time {if {[expr {5%2}]} {expr 1} else {expr 2}} $n]
# unbraced
puts [time {if [expr {5%2}] {expr 1} else {expr 2}} $n]
# removing the unnecessary `expr` command altogether
puts [time {if {5%2} {expr 1} else {expr 2}} $n]
}
Then, run it once, two times
% time_it 1
89 microseconds per iteration
27 microseconds per iteration
45 microseconds per iteration
% time_it 1
3 microseconds per iteration
8 microseconds per iteration
1 microseconds per iteration
I assume there's some compilation going on during the first run. The un-braced code is slowest during the 2nd run. Now, time it over a bunch of iterations.
% time_it 1000
0.27 microseconds per iteration
1.245 microseconds per iteration
0.267 microseconds per iteration
% time_it 10000
0.2823 microseconds per iteration
1.2491 microseconds per iteration
0.2198 microseconds per iteration
% time_it 100000
0.28989 microseconds per iteration
0.80064 microseconds per iteration
0.11543 microseconds per iteration