Normally Firebase starts with a websocket. After measuring, we've found it to in general be more reliable and have better performance characteristics, especially for uploads. However, if websockets are unavailable or are failing, the client will use long-polling. XHR requests have some drawbacks. They are not always available cross-domain, and if you have multiple tabs open communicating with the same server, some browsers will limit the available sockets, forcing tabs to take turns polling.
You can, if you want, force Firebase to use long polling by calling Firebase.INTERNAL.forceLongPolling();
Regarding the linked question, we will investigate what's going on (please email support at firebase.com if you haven't already), as those measurements are definitely higher than they should be and are somewhat atypical.