ccDraw* methods aren't batch-drawn and meant for debugging, they are not particularly efficient.
CCDrawNode is a much better option as it can batch-draw primitives, but it doesn't allow primitives to be removed without recreating them all.
Batched sprites are usually the best option. How much this affects fps depends on your use case and targeted devices. Problem is they don't "scale" well, so it's best to have each required size of a shape as a separate image. On the other hand you can tint (colorize) a grayscale image in order to have more color variety without having to have each shape with different colors as separate images.