Depends on your goal. I see very little post increment usages just for the sake of the "post". So in my opionion it's because of conventions in writing. Loops are written with post incremeant, giving us an habit of writing it in that way (for i=0;i<10;i++).
But when you do need to evaluate the value before incremeanting ( var x = i++) So you both save the previous value and incremeant it at the same time, then you use it.
From readablity perspective it's nonsense to use that. because the purpose of var x=i++ is to assign i to x, the i++ is a side effect although we've directly written it to do it. It's 2 logical operations inside 1 sentence, which is basicly a smelly code to write (like a function with 2 responsibilities).
What was shown above is compiler optimizations. If you provide constant values and do some math with them, it'll simply calculate in compile team.
So (1+2+3+4+5) ++ becomes 16.
It's true with many mathematical operations. The really interesting optimizations are inside the CPU where conditions have to be met.
For example ++i > 5 , How does the cpu know which code to load? The one that ++i > 5 is true or the one that it's smaller?
if i is known as a const, it will produce the value of 6 , then 6>5 is always true. So it would never load the 'else' code.
But if it's a runtime variable, it would sometimes guess wrong (small cases) and will load both code into the cache.