Command block use huge amount of bandwidth
NBT-data are sent for each command-block every time the 'previous output' is updated (This is obviously useless - the client does not care). This kills every bandwidth even with just 100 command-blocks.
The solution would be quite simple: Do not send the NBT-data immediately, but only when a user opens the GUI (this is the only case the client needs it)