0

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

4

1 回答 1

2

除了传输数据实际花费的时间之外,单个调用transferIn()还必须做很多工作来设置主机以从设备接收数据。即使假设 Web 浏览器和操作系统引入了零延迟,USB 也仅每 1ms(对于全速设备)或 125us(对于高速设备)提供传输机会。提高数据传输率的技巧是:

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

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

该建议也适用于transferOut().

于 2019-01-23T23:02:54.800 回答