From what I understand introducing branching does have an impact. There is a lot of discussion over on this Stack Overflow Question and this Stack Overflow Question
In short - it seems to depend on 2 factors: The age/make of gpu and what kind of if statement you have:
Of the gpu age/make: The compiler on the gpu will handle branching in different ways. It may be able to make optimisations or assumptions, or then again it might force all branches to be executed and then pick which one is valid afterwards - so you can imagine a lot of branching really starts to eat at performance in that case.
Of the 'if' statement: If you're checking a uniform value, that would be evaluated the same in all executions of your Shader program, then the performance hit is relatively minor. But if you're checking a calculated value from this vertex/fragment code execution, then the performance hit is big.
I would consider either:
Having a Shader per-configuration setup, do the if/else checks in your app code, select the appropriate Shader, run without any Shader branching.
And/or, look into the alternatives to branching e.g. Uniforms that can be applied in a way where - if set to certain values - they don't actually change any visual result. E.g. a BlendColour that tints your final result, if set to white, doesn't actually change anything you've already calculated.
But in my experience, nothing works better than trying it out and profiling.