Felipe,
Imagine a painting.
You have a white background and start drawing an apple with a lot of detail for an hour and then you completely cover it with another layer of white paint. This is visibility.
display: none
is as if it had not been drawn from the beginning. Of course, it's faster on the first load.
There are drawbacks when you're using display: none
however: when you're switching back to the block (or inline, etc) you'll have to start drawing the painting, but using visibility the browser is just scratching the last and he's back. Thus visibility is faster in this case.
But remember one thing when you are using visibility: hidden element keeps its position in the stream so that the elements around it will not budge.
If you want a technical explanation, check out the David Baron lecture .
One way to optimize your site is to use Google PageSpeed Tools it shows you how optimize your mobile / desktop page by passing everything that is incorrect and suggesting possible improvements.
I found here Lots of DOM. Hidden vs display none