The vertex shader runs once per vertex on the surface, while the fragment shader runs once per pixel on the surface. Therefore you are correct, the fragment shader will run many more times then the vertex shader.

When building complex shaders with lots of calculations, always try to do the work in the vertex shader as much as possible rather than doing it in the pixel shader. Also, if you can offload calculations from the vertex shader and do them in the C++ code and then pass the result into the vertex shader via a uniform variable, then this is also desired (we do that with the Model View Projection matrix when we know that all vertices have the same matrix multiplied).

There are trade offs between doing calculations in the vertex shader vs doing them in the pixel shader though. When you calculate things like light effects or bump maps, you want to do those in the pixel shader or else your results are not going to look good.

Compare the following images to see the differences:

This is a basic light model calculated in the vertex shader:

This is the same light model calculated in the pixel shader:

For this challenge, we are only rendering a single surface so you will not see a performance difference when doing the calculations in the pixel shader vs the vertex shader.