I don’t think it’s ill-advised. I personally choose from 2 and 3.
I start with not optimising at all. Having a working feature is more important than having it working fast. Of course, I try to write optimal code at first, but unless I have plenty of time (which us, developers, rarely do) I’m more into keeping deadlines than writing perfect code.
Next, if I know about a piece of sub-optimal code, I fix that. It’s rare, but happens sometimes, and I usually mark it with a TODO comment, and/or open an issue for it.
Finally, I sometimes run my code through a profiler. This is a time consuming thing, as the profiler itself also adds some overhead to the measurement, so you always get a slightly skewed result. It’s a bit cumbersome to decide if the slow code is sub-optimal, or profiling made it slow.
My advise is to do it if you have time, but usually it’s easier (and more useful) to hunt bugs instead of optimising.