Arduino w/ Google App Engine Slow print char. Please Help.

In the below code I attempt to get a temperature reading from a probe and send it to google app engine. Everything works as planned. I even get the server on google app engine to recognize the input and adjust a dial.

However, when it goes to print the char variable “c” (Serial.print(c)) in line 103ish it takes about 6-10 seconds to print each letter of the result. Is there a reason it is so slow?

Normally(without the temperature probe code ) it prints all of this in a second:
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Vary: Accept-Encoding
Date: Thu, 06 Feb 2014 04:42:47 GMT
Server: Google Frontend
Alternate-Protocol: 80:quic

Sorry for all the mess, I commented out the code for a timer to test if it was the problem and left it that way.

//TEMPERATURE
  #include <OneWire.h>
  #include <DallasTemperature.h>
  #define ONE_WIRE_BUS 3// Data wire is plugged into pin 3 on the Arduino
  OneWire oneWire(ONE_WIRE_BUS);// Setup a oneWire instance to communicate with any OneWire devices
  DallasTemperature sensors(&oneWire);// Pass our oneWire reference to Dallas Temperature. 
  DeviceAddress WaterTemp = { 
    0x28, 0xD2, 0xF7, 0xE0, 0x04, 0x00, 0x00, 0x94};// Assign the addresses of your 1-Wire temp sensors.
//TIME
//  #include <Wire.h>
//  #include "RTClib.h"
//  RTC_DS1307 RTC;
//INTERNET
  #include <SPI.h>
  #include <UIPEthernet.h>
  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };// Enter a MAC address for your controller
  char server[] = "http://www.rti-arduino.appspot.com";    // name address for Google (using DNS)
  IPAddress ip(192,168,0,177);// Set the static IP address to use if the DHCP fails to assign
  EthernetClient client;// Initialize the Ethernet client library
//VARIABLES
  float farenheit;
  float RH; 

//SETUP
void setup (void) {
  Serial.begin(9600); // start serial port
    // Internet
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");    // no point in carrying on, so do nothing forevermore:
    Ethernet.begin(mac, ip);   // try to congifure using IP address instead of DHCP:
  }
  Serial.println("Connecting...");
  sensors.begin();  // Start up the Temp library
  sensors.setResolution(WaterTemp, 12);// set the resolution to 10 bit 
  // Time
//    Wire.begin();  // Initialize wire library and RTC module
//    RTC.begin();
//    RTC.adjust(DateTime(__DATE__, __TIME__)); // set up the module time and date with the computer one
}

//INTERNET CONNECT FUNCTION
void connect(){
if (client.connect(server, 80)) {
      Serial.print("Sending Data:");// if you get a connection, report back via serial:
      Serial.print(farenheit);
      Serial.println();
      // Make a HTTP request:
      client.print("GET http://www.rti-arduino.appspot.com/adacs/dht?Temp=");//client.println("GET http://www.rti-arduino.appspot.com/adacs/dht?Temp=" Temp  "&RH="  RH  "HTTP/1.1");
      client.print(farenheit);
      client.print("&RH=");
      client.print(RH);
      client.print("\n\r");
      client.println();
    } 
    else {
      Serial.println("Data not sent, connection failed...");    // if you didn't get a connection to the server:
      client.stop();
    }
}

//Interne TEMPERATURE FUNCTION
void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Error getting temperature");
  } 
    else {
      //Print Temperature
      farenheit = DallasTemperature::toFahrenheit(tempC);
      //Serial.println(farenheit);
      //Serial.println(); 
  }
}

//MAIN FUNCTION
void loop (void) {
    delay(3000);//Time Delay   
   // Temperature Function
    sensors.requestTemperatures();//Request temp
    printTemperature(WaterTemp); 
    //Time
//      DateTime now = RTC.now();
//      Serial.print(now.day(), DEC);
//      Serial.print('/');
//      Serial.print(now.month(), DEC);
//      Serial.print('/');
//      Serial.print(now.year(), DEC);
//      Serial.print(' ');
//      Serial.print(now.hour(), DEC);
//      Serial.print(':');
//      Serial.print(now.minute(), DEC);
//      Serial.print(':');
//      Serial.print(now.second(), DEC);
//      Serial.print(' ');

    // Internet Function
    if (client.available()) {
      char c = client.read();
      Serial.print(c);
      delay(3000);
      }
    if (!client.connected()) {
      Serial.println();
      Serial.println("disconnecting...");
      client.stop();
      delay(3000);
      RH = RH+1;//temporary
     connect();
  }
}

Can anyone help me solve this or give me suggestions? just ask if I need to give more information.

Thank you!

    if (client.available()) {
      char c = client.read();
      Serial.print(c);
      delay(3000);
      }

Presumably it is not the actual printing that takes the time but the testing to see whether the client is available, the acquisition of the data using client.read(), oh, and the 3 second delay between characters, of course.

I will take out the delay, and get back to you. It was my understanding that the delay happens after the entire serial print. None the less I will try it.

Also I am confused as to why the client.read takes long to respond from the server, because when I take the code for temperature out it responds instantly.

Thank you for helping.

removing the delay does give me a response time of about 3 seconds per letter(thank you @UKHeliBob) . This is an improvement but still does not explain why it is taking so long. Like I said above, without the temperature probe code the entire client.read() prints in 3 seconds flat.

Can anyone help me reduce the time further or explain why it takes so long?

What about the 3 second delay at the start of loop()?

Or reading in one go, rather than a char per loop of loop():

while( client.available() > 0 ){
  Serial.print( client.read() );
}

Thank you! That sped the process tremendously!

Serial.print will only do the number that client.read() interprets, however if I put Serial.write and use a while like you suggested, the text prints instantaneously.

Also this link helped organize my code: http://www.iowa-aquaponics.com/arduino/#WaterQualityDAQ

I am a beginer at arduino and have really sloppy mostly pieced together code. Thank you for helping me once again!