Speed up upload by a factor of 17 (#4787)
* Speed up upload by a factor of 17 Uploads are very slow because of an unnecessary "client.connected()" check in _uploadReadByte(). Here is what happens: client.connected() is called for every byte read. WiFiClient::connected() calls recv(fd(), &dummy, 0, MSG_DONTWAIT); which takes a relatively long time, so the optimized path of returning a buffered byte via client.read() is effectively nullified. Removing the one line changed the upload speed for a 2 MB file (discarding the received data) from 22 KB/sec (before) to 367 KB/sec (after). The change is safe in the face of disconnects because client.read(), when it no longer has buffered data, calls (WiFiClient) fillBuffer(), which calls recv(), so the disconnection will be detected in due course. * Move disconnect check into the timeout loop
This commit is contained in:
parent
15bae92a72
commit
7e8993fc83
@ -303,7 +303,6 @@ void WebServer::_uploadWriteByte(uint8_t b){
|
||||
}
|
||||
|
||||
int WebServer::_uploadReadByte(WiFiClient& client){
|
||||
if (!client.connected()) return -1;
|
||||
int res = client.read();
|
||||
if(res < 0) {
|
||||
// keep trying until you either read a valid byte or timeout
|
||||
@ -311,6 +310,7 @@ int WebServer::_uploadReadByte(WiFiClient& client){
|
||||
long timeoutIntervalMillis = client.getTimeout();
|
||||
boolean timedOut = false;
|
||||
for(;;) {
|
||||
if (!client.connected()) return -1;
|
||||
// loosely modeled after blinkWithoutDelay pattern
|
||||
while(!timedOut && !client.available() && client.connected()){
|
||||
delay(2);
|
||||
|
Loading…
Reference in New Issue
Block a user