Magari avevi provato e ti eri dimenticato di salvare, capita spesso anche a me
Cercherò di darti una spiegazione come meglio riesco:
Async e defer sono due parametri che in realtà a rigor di logica vanno in conflitto tra di loro, quindi magari va in crisi il browser, ma ti spiego meglio.
Premettendo che questi parametri funzionano solo per browser che supportano HTML5, devi tener conto che con quest'ultimo puoi decidere(con l'ausilio di questi 2 parametri), quando far eseguire uno script, quindi, consideriamo ed analizziamo queste 3 probabilità:
<script src="mioscript.js"></script>
In questo primo caso(quindi senza parametri) il browser caricherà ed eseguirà lo script subito prima di renderizzare tutto ciò che si trova sotto questo tag.
<script async src="mioscript.js"></script>
Con "async" (asincrono) invece, il browser continua a caricare l'HTML e a renderizzarlo mentre il browser carica ed esegue lo script contemporaneamente.
<script defer src="mioscript.js"></script>
Con "defer" (rinvio) invece, il browser eseguirà lo script quando ha finito il parsing della pagina.
Quindi puoi dedurre da solo che async e defer sono circa gli opposti, e magari andava in crisi il browser, oppure non capiva cosa fare
Però mi hai anche detto che alcune volte andava, e questo non avveniva come pensi tu grazie allo script "fantasma" che inserivi, ma bensì molto probabilmente(non ne sono certo, bisognerebbe verificare), perchè al primo caricamento lo scaricava troppo lentamente rispetto al load della pagina, e al refresh della pagina era già disponibile(cache), e quindi funzionava per forza di cose
Se vuoi proprio verificare fai un controllo di pesantezza della pagina al primo caricamento(chiaramente dopo aver svuotato le cache così da riscaricarsi il js remoto), poi una seconda volta dopo aver caricato la prima volta, se la seconda volta è più leggera molto probabilmente hai risolto il rompicapo
Spero di essere stato chiaro ed esaustivo se hai qualche dubbio chiedi pure