It is possible to compile shaders for every frame. This reduces the performance of your application because shader compilation requires CPU and memory resources.
It is more efficient to compile shaders when your application starts. This only requires resources when your application starts, so it does not reduce the performance of your application while it is running.
You can also ship your application with pre-compiled shaders. These only require linking at runtime so require relatively little runtime CPU resources.