WiFi shield TCP to webserver is very slow

I traced the client.print() as far as I can go and each one of them will trigger a call to send SPI command to the shield MCU with the string so I think SurferTim is right. Each print or write creates its separate packet.

BTW, has anyone noticed the limitation of string length being around 90 bytes? If you do print() with a string say 100 bytes long, your other end just doesn't receive anything.