Flutter Dart Dio Get Request is so slow Flutter Dart Dio Get Request is so slow dart dart

Flutter Dart Dio Get Request is so slow


I believe that reason for this; buffer size is limited to 8KB somewhere underlying.

I tried whole day to increase it. Still no success. Let me share my experience with that buffer size.

Imagine you're downloading a file which is 16 mb.

Please consider that remote server has also higher speed than your download speed. (I mean just forget about server load, etc.. )

If buffersize:

128 bytes, downloading 16mb file takes : 10.820 seconds

1024 bytes, downloading 16mb file takes : 6.276 seconds

8192 bytes, downloading 16mb file takes : 4.776 seconds

16384 bytes, downloading 16mb file takes : 3.759 seconds

32768 bytes, downloading 16mb file takes : 2.956 seconds

------- After This, If we increase chunk size, download time is also increasing

65536 bytes, downloading 16mb file takes : 4.186 seconds

131072 bytes, downloading 16mb file takes : 5.250 seconds

524288 bytes, downloading 16mb file takes : 7.460 seconds

So somehow, if you can set that buffersize 16k or 32k rather than 8k, I believe download speed will increase.

Please feel free to test your results (I got 3 tries and got average of them for the timings)

package dltest;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;public class DLTest {    public static void main(String[] args) throws Exception     {        String filePath = "http://hcmaslov.d-real.sci-nnov.ru/public/mp3/Metallica/Metallica%20'...And%20Justice%20For%20All'.mp3";        URL url = new URL(filePath);        URLConnection uc = url.openConnection();        InputStream is = uc.getInputStream();        long start = System.currentTimeMillis();        int downloaded = 0;        int total = uc.getContentLength();        int partialRead = 0;        // byte chunk[] = new byte[128];        // byte chunk[] = new byte[1024];        // byte chunk[] = new byte[4096];        // byte chunk[] = new byte[8192];           byte chunk[] = new byte[16384];        // byte chunk[] = new byte[32768];        // byte chunk[] = new byte[524288];        while ( (partialRead = is.read(chunk)) != -1)        {                // Print If You Like..        }        is.close();        long end = System.currentTimeMillis();        System.out.println("Chunk Size ["+(chunk.length)+"] Time To Complete :  "+(end - start));    }}


My experience with DigitalOcean Spaces has been a very fluctuating one. DO Spaces is, in my opinion, not production ready. I was using their CDN feature for a website, and sometimes the response times would be about 20ms, but sometimes they would exceed 6 seconds. This was in AMS3 datacenter region.

Can you confirm this happens with other S3/servers as well? Such as gstatic, or Amazon CloudFront CDN?

This fluctuating behaviour happened constantly, which is why we transferred all our assets to Amazon S3 + CloudFront. It provides much more consistent results.

It could be that the phone you are testing on uses a very unoptimized traceroute to the DigitalOcean datacenters. That's why you should try different servers.