首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter Dart Dio Get请求太慢

Flutter Dart Dio Get请求太慢
EN

Stack Overflow用户
提问于 2020-11-19 21:23:13
回答 2查看 2.8K关注 0票数 7

我在数字海洋中托管一个空间-它基本上是亚马逊S3等同于数字海洋。我对dio的问题是,我用dio向一个10MB大小的文件发出get请求。该请求在我的手机上大约需要9秒,但在我的浏览器中需要3秒。我在我的自定义后端也有这个问题。使用dio (使用dart的http模块)发出的Get请求似乎非常慢。我需要解决这个问题,因为我需要不时地向用户传输50MB的数据。为什么dio对GET请求的反应很慢?

我怀疑这可能是check here的根本原因

代码语言:javascript
复制
await Dio().get(
        "Remote_Url_I_can_not_share",
        onReceiveProgress: (int downloaded, int total) {
          listener
              .call((downloaded.toDouble() / total.toDouble() * metadataPerc));
        },
        cancelToken: _cancelToken,
      ).catchError((err) => throw err);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-11 02:20:04

我相信这是有原因的;缓冲区的大小被限制在8KB的底层。

我试了一整天来增加它。还是没有成功。让我分享一下我使用该缓冲区大小的经验。

假设你正在下载一个16mb的文件。

请考虑远程服务器的速度也高于您的下载速度。(我的意思是忘记服务器负载,等等。)

如果buffersize:

128字节,下载16mb文件耗时: 10.820秒

1024字节,下载16mb文件耗时: 6.276秒

8192字节,下载16mb文件耗时: 4.776秒

16384字节,下载16mb文件耗时: 3.759秒

32768字节,下载16mb文件耗时: 2.956秒

-之后,如果我们增加区块大小,下载时间也会增加

65536字节,下载16mb文件耗时: 4.186秒

131072字节,下载16mb文件耗时: 5.250秒

524288字节,下载16mb文件耗时: 7.460秒

因此,不知何故,如果您可以设置缓冲区大小为16k或32k而不是8k,我相信下载速度会提高。

请随时测试您的结果(我有3次尝试,并得到了它们的平均时间)

代码语言:javascript
复制
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));
    }
}
票数 3
EN

Stack Overflow用户

发布于 2020-11-28 22:39:37

我使用DigitalOcean Spaces的经验是非常不稳定的。在我看来,DO Spaces还没有做好生产准备。我在一个网站上使用他们的CDN功能,有时响应时间约为20ms,但有时会超过6秒。这是在AMS3数据中心区域。

您能确认其他S3/服务器也会发生这种情况吗?例如gstatic或亚马逊CloudFront CDN?

这种波动行为经常发生,这就是为什么我们将所有资产转移到亚马逊S3 + CloudFront。它提供了更一致的结果。

这可能是你正在测试的手机使用了一个非常未经优化的到DigitalOcean数据中心的跟踪路由。这就是为什么你应该尝试不同的服务器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64912596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档