For greater security, privacy, and read speeds, you may choose to run a local blockchain client, and connect MetaMask to it. A local blockchain client takes a while to "synchronize" with the network, but once it has, it's easy to connect MetaMask to it.
There are a number of clients out there, including Besu, which ConsenSys helps maintain. Here's a helpful guide on setting up a node. Once you have your local client set up, you can connect to it with the network menu in the top left corner of MetaMask:
Geth needs to have a special CORS setting enabled to allow MetaMask to connect to it by default, so try starting it with this command:
geth --rpc --rpccorsdomain="chrome-extension://nkbihfbeogaeaoehlefnkodbefgpgknn"
Parity has installers for Mac and Windows, and seems to work with MetaMask pretty easily out of the box, once synchronized.