I think it's that loading new resources/scenes is really bad. Noticed this myself as well, and it's usually when an explosion happens, or new variety of enemy spawns in. Probably some ways in Godot to force load them at the beginning.
Weirdly enough, I've seen some discussion about this, and I've even done a help ticket. The trick, if I remember correctly, is putting all of these materials and particles into a static object so that they're loaded and cached throughout the lifetime of the app. That is to say: make a scene of nothing and put a script with static variables into it.