Those boards have an inherent weakness in that they don't provide enough decoupling capacitance for the module.
Not all modules are quite the same, and some have more internal decoupling than others (not by design, just due to component tolerances).
I have found that unless you provide adequate decoupling of your own some modules work just fine and some don'...
For a proof-of-concept, use two Arduinos, one for WiFi and one for everything else.
The everything-else Arduino can keep your system responsive (minus the WiFi, of course, during connection time) and poll the WiFi Arduino periodically (without blocking) to find out when WiFi becomes available.