Why is Blender's V.S.E. Slow?
Short answer:


There is no “rendered” cache.
Not all codecs are equal.


As to the first point, every single operation, including shifting resolutions from your source file to destination, alpha overs, etc. are all done in real-time. This means that if you stack twenty strips with Alpha Over, every one is calculated on the fly.

As to the second point, codecs are designed with different design goals. Some are to compress the data size, some are for streams, some are for other nuanced things. These codecs can put more or less demand on a system depending how they were designed.

Typically, you shouldn't be doing manipulations and effects work in an NLE anyways, so it isn't much of an issue; use an NLE to get your beats, but use other tools for your grading or effects work in a non-realtime environment.

To maximize the VSE's ability to perform, you might want to try a few things:


Keep your rendering output dimensions precisely the same as the dimensions of your input file. Some DSLRs for example shoot 1920x1088, and using 1920x1080 will result in a costly scale every frame.
Use temporary simple effects strips to block in your complex work. Worry about keeping the frame rate high instead of how it looks. You can do the heavy work later in a compositor.
Don't bother grading or adding more processing. Again, save that for when you are finished so you can grade it more precisely in a proper tool, at proper deeper bit depths.
Keep dissolves and overs to an absolute minimum. The VSE can keep up if you avoid stacking many together.
Use a codec designed for quick seeking and decoding. A non Group Of Pictures (GOP) codec that stores all I frames is ideal.


As someone who decided to try and take a piece to broadcast with Blender, I can tell you that it can be used effectively, albeit with some effort and planning.

Hope that helps you along...