Are you sure about no JSON? My experience is JSON is fairly small, and faster than anything else because it has browser support.
ArrayBuffer and DataView are fairly fast for my standards.
[1] https://gist.github.com/synthmeat/d23595db732d366f658a1981e9...
The problem is less the client, you're right with that. The problem is that server bandwidth and CPU scale up really quickly if you try to do 30fps, no matter what method you use to keep state in sync. If you want any significant amount of players in a realtime game, this will be one of your first bottlenecks, probably before any encoding and decoding.
For less realtime-y games, JSON and also socket.io can be perfectly adequate.
Protobuf is just insanely slow to encode/decode client side. So that's out too if you want fast paced games. And for slower games it is not worth the effort.