You can pre-create all nodes before game scene loads(using completion handler) and when needed, just show them i.e. setHidden = NO. This way you don't have to recreate nodes again and again. When nodes are not needed, just set them hidden. You can read more here. Just find part about lasers. I think that would be one way to resolve framerate drop caused by spawning many nodes at same time. And I hope you use atlases...To be sure that everything works correctly enable your draws and nodes count info in view controller and check stats. If you don't use atlases, or use them incorrectly it may happen that draws count is high (comparing to nodes count).
About atlases from the docs:
When you create a texture atlas, you want to strike a balance between
collecting too many textures or too few. If you use too few images,
Sprite Kit may still need many drawing passes to render a frame. If
you include too many images, then large amounts of texture data may
need to be loaded into memory at once. Because Xcode builds the
atlases for you, you can switch between different atlas configurations
with relative ease. So experiment with different configurations of
your texture atlases and choose the combination that gives you the
best performance.