downloader 的下载并发数实现问题

  • Creator 版本: 3.8.2

  • 目标平台:所有平台

  • 问题描述:
    preload 一堆资源堆积下载队列,在下载过程中,再 load 一堆资源,有可能出现一直使用 preload 的并发数去获取下载队列中的请求。

  • 问题原因
    1、preload 的默认最大并发数为 6,最帧最大并发数为 2
    2、当 preload 一堆资源时,队列并发最大 为 6,其余的下载请求会放入队列中等待
    3、此时调用 load 操作下载一堆资源时,若超过 load 最大并发数,load 下载请求也会放入队列中等待
    4、当某个 preload 资源下载完成,会调用 this._handleQueueInNextFrame(maxConcurrency, maxRequestsPerFrame) 接口去队列中取下载请求
    5、调用该接口的 maxConcurrency 和 maxRequestsPerFrame 此时为 6 和 2,
    6、在执行 _handleQueue 操作时,就会按照最大并发数为 6,最帧最大并发数为 2,去取队列中的下载请求,由于此时下载开发数 _totalNum 为 load 的最大并发数,该操作就无法取得下载请求,继续调用 _handleQueueInNextFrame 下帧重试,重试的时候传入的参数 maxConcurrency 和 maxRequestsPerFrame 依然是 6 和 2
    7、以上就会导致 _handleQueue 一直以最大并发数 6 和 最帧最大并发数为 2 的参数传递来读取等待队列,直到队列清空