'transferIn()'函数的执行速度是否约为0.16s?

时间:2019-01-17 09:21:32

标签: webusb

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

1 个答案:

答案 0 :(得分:1)

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

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

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

此建议也适用于transferOut()