【问题标题】:Improve axios get download speed提高axios获取下载速度
【发布时间】:2020-08-19 16:44:11
【问题描述】:

我正在使用 axios 从 Azure 存储 Blob 下载文件 (~100MB)。

axios({
  method: 'get',
  url: uri,
  onDownloadProgress: (progressEvent) => {
    console.log("Loaded: " + ((progressEvent.loaded / progressEvent.total) * 100) + "%"); 
  },
  responseType: 'arraybuffer'
}).then({})

我的问题是实际下载文件需要相当长的时间(约 10 分钟)。我以前使用的 fetch() 甚至比这慢(约 15-20 分钟)。对于如何加快下载速度,你们有什么建议吗?我的网速不是问题,直接下载文件或使用 Azure 存储资源管理器(1.12.0,AzCopy 10.3.3)只需不到 2 分钟。

我也尝试使用 azure-storage 的 blobServiceClient,但速度与 axios 和 fetch 相似(大约 15kbps)。

如果有帮助,这在 React 应用中。

【问题讨论】:

  • 你能提供你的uri格式吗?
  • 我的答案你可以自己测试,我觉得对你有用,你只需要替换url进行测试。
  • 我很期待你的测试结果,如果我的建议对你有效,我很高兴你能告诉我。

标签: reactjs axios azure-blob-storage


【解决方案1】:

我已经测试了下载速度。希望我的结果对你有用。

  1. 我上传StorageExplorer.exe作为下载测试的源文件。文件大小为 92.5M。

  1. 通过Azure Storage Explore下载文件,需要1 minute and 07 seconds。

  1. 通过chrome浏览器在portal中下载文件,需要58 seconds。

  1. 通过我的测试代码下载文件。

①从portal或Storage Explore复制Url。

网址如:https://p*****ge.blob.core.windows.net/testcontainer/StorageExplorer.exe

经过我的代码测试,需要1 minute and 52 seconds,而且非常不稳定,有时测试下载时间会更长。

②从AzCopy Command复制Url。

url格式如下:https://pan********ge.blob.core.windows.net/testcontainer/StorageExplorer.exe?se=2020-09-18T07%3A55%3A28Z&sp=rl&sv=2018-03-28&sr=c&sig=5kJyTBwHHRS******mlj3%2FWj9CmvQriXCMi4%3D

同样的代码测试后,会占用1 minute and 02 seconds。

我的测试结论:

不要使用看起来像https://p*****ge.blob.core.windows.net/testcontainer/StorageExplorer.exe的网址。

您可以使用类似于从 AzCopy 命令获取的 url。

下面是我的测试代码。

  1. npm 我进度
  2. npm i axios
'use strict'

const Fs = require('fs')  
const Path = require('path')  
const Axios = require('axios')  
const ProgressBar = require('progress')

async function download () {  
  const url =    'https://pan*****e.blob.core.windows.net/testcontainer/StorageExplorer.exe'

  console.log('Connecting …')
  const { data, headers } = await Axios({
    url,
    method: 'GET',
    responseType: 'stream'
  })
  const totalLength = headers['content-length']

  console.log('Starting download')
  const progressBar = new ProgressBar('-> downloading [:bar] :percent :etas',     {
      width: 40,
      complete: '=',
      incomplete: ' ',
      renderThrottle: 1,
      total: parseInt(totalLength)
    })

  const writer = Fs.createWriteStream(
    Path.resolve(__dirname, 'software', 'StorageExplorer.exe')
  )
  data.on('data', (chunk) => progressBar.tick(chunk.length))
  data.pipe(writer)
}

download()

【讨论】:

  • 谢谢!使用 AZ Copy url 将我的速度提高到更合理的时间
猜你喜欢
  • 2018-04-13
  • 2019-06-02
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多