我在数字海洋中托管一个空间-它基本上是亚马逊S3等同于数字海洋。我对dio的问题是,我用dio向一个10MB大小的文件发出get请求。该请求在我的手机上大约需要9秒,但在我的浏览器中需要3秒。我在我的自定义后端也有这个问题。使用dio (使用dart的http模块)发出的Get请求似乎非常慢。我需要解决这个问题,因为我需要不时地向用户传输50MB的数据。为什么dio对GET请求的反应很慢?
我怀疑这可能是check here的根本原因
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);发布于 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次尝试,并得到了它们的平均时间)
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));
}
}发布于 2020-11-28 22:39:37
我使用DigitalOcean Spaces的经验是非常不稳定的。在我看来,DO Spaces还没有做好生产准备。我在一个网站上使用他们的CDN功能,有时响应时间约为20ms,但有时会超过6秒。这是在AMS3数据中心区域。
您能确认其他S3/服务器也会发生这种情况吗?例如gstatic或亚马逊CloudFront CDN?
这种波动行为经常发生,这就是为什么我们将所有资产转移到亚马逊S3 + CloudFront。它提供了更一致的结果。
这可能是你正在测试的手机使用了一个非常未经优化的到DigitalOcean数据中心的跟踪路由。这就是为什么你应该尝试不同的服务器。
https://stackoverflow.com/questions/64912596
复制相似问题