'transferIn()'函数的执行速度是0.16s左右吗?
Is the execution speed of the 'transferIn()' function about 0.16s?
它从一个 transferIn 函数接收 2048 个字节作为批量传输。
执行一个功能需要0.16s。
这意味着需要超过 80s 才能获得 1mb。
我应该如何使用 WebUSB 加快我的 JavaScript 代码的速度?还是没有办法?
除了传输数据实际花费的时间之外,对 transferIn()
的单个调用还必须做大量工作来设置主机以从设备接收数据。即使假设网络浏览器和操作系统引入了零延迟,USB 也仅每 1ms(对于全速设备)或 125us(对于高速设备)提供一次传输机会。提高数据传输速率的技巧是:
提交 transferIn()
缓冲区比端点数据包大小大得多的调用。这会以延迟换取吞吐量。在缓冲区已满或收到一个短数据包之前传输不会完成,但主机控制器不会浪费时间等待操作系统要求它向设备请求更多数据。
并行提交多个 transferIn()
调用。这增加了更多的开销,但通过以更高的粒度报告传输完成解决了延迟问题。此技术通常用于传递事件的端点。保持至少两个传输同时进行可确保立即交付下一个事件,而不必等到处理完第一个事件后设置新的传输请求。
此建议也适用于 transferOut()
。
它从一个 transferIn 函数接收 2048 个字节作为批量传输。 执行一个功能需要0.16s。 这意味着需要超过 80s 才能获得 1mb。 我应该如何使用 WebUSB 加快我的 JavaScript 代码的速度?还是没有办法?
除了传输数据实际花费的时间之外,对 transferIn()
的单个调用还必须做大量工作来设置主机以从设备接收数据。即使假设网络浏览器和操作系统引入了零延迟,USB 也仅每 1ms(对于全速设备)或 125us(对于高速设备)提供一次传输机会。提高数据传输速率的技巧是:
提交
transferIn()
缓冲区比端点数据包大小大得多的调用。这会以延迟换取吞吐量。在缓冲区已满或收到一个短数据包之前传输不会完成,但主机控制器不会浪费时间等待操作系统要求它向设备请求更多数据。并行提交多个
transferIn()
调用。这增加了更多的开销,但通过以更高的粒度报告传输完成解决了延迟问题。此技术通常用于传递事件的端点。保持至少两个传输同时进行可确保立即交付下一个事件,而不必等到处理完第一个事件后设置新的传输请求。
此建议也适用于 transferOut()
。