'transferIn()' 函数的执行速度大约是 0.16 秒吗?



它从一个transferIn函数接收2048字节作为批量传输。执行一个函数需要0.16s。这意味着需要80多岁才能获得1mb。我应该怎么做才能使用WebUSB在JavaScript代码上加快速度?还是没有办法?

除了传输数据实际需要的时间外,对transferIn()的一次调用还需要做大量工作来设置主机以从设备接收数据。即使假设网络浏览器和操作系统引入了零延迟,USB也只能每1ms(对于全速设备)或125us(对于高速设备)提供一次传输机会。提高数据传输速率的技巧是:

  1. 提交缓冲区远大于端点数据包大小的transferIn()调用。这会以延迟换取吞吐量。在缓冲区满或收到短数据包之前,传输不会完成,但主机控制器不会浪费时间等待操作系统要求它向设备请求更多数据。

  2. 并行提交多个transferIn()调用。这增加了更多的开销,但通过以更高的粒度报告传输完成来解决延迟问题。此技术通常用于传递事件的端点。同时保持至少两次传输可以保证下一次事件将立即交付,而不必等到第一次事件处理后建立新的传输请求。

此建议也适用于transferOut()

最新更新