在 javascript 应用程序中为 I/O 使用 Google 本机客户端 (NACL) 的预期加速?
Expected speedup from using Google Native Client (NACL) for I/O in javascript application?
我正在开发客户端 javascript 应用程序(到 运行 in google chrome),它需要从磁盘加载大量数据,并且目前这在速度上造成了巨大的瓶颈,足以使应用程序无法运行。
我想知道是否值得研究构建一个 NACL 插件来解决这个问题(即:使用 nacl_io)?
我是否应该期望使用基于 NACL 的解决方案从磁盘读取的速度明显快于 javascript?如果是这样,我应该期望什么样的加速(即:2x、5x 等)?
我对 javascript 的内部文件阅读器以及 NACL 流水线的细节了解不够,无法自己回答这些问题。
Native Client 在读取文件时连接到与 JavaScript 相同的底层 Chrome 接口,因此您可能不会看到显着的加速。此外,如果您在 Native Client 模块中读取数据,之后无论如何都需要将其发送到 JavaScript。
也就是说,也许你从磁盘读取的效率很低。如果您还没有尝试读取更大块的文件(尝试不同大小:64k、1m 等)。
无论如何您可能想要使用 Native Client 的原因有两个:
如果你也可以在 Native Client 模块中处理数据,并且处理当前是 CPU-bound 或可以并行处理。 Native Client 支持线程和进程内共享内存。 JavaScript 支持线程(通过 Workers),但目前只允许复制或传输 ArrayBuffer,不能共享它们。
如果您因为 JavaScript 代码在事件循环中没有让步而锁定网页,您可以使用 Native Client 从另一个线程读取文件。您可以在 Native Client 中阻止工作线程,而无需停止整个应用程序。
我正在开发客户端 javascript 应用程序(到 运行 in google chrome),它需要从磁盘加载大量数据,并且目前这在速度上造成了巨大的瓶颈,足以使应用程序无法运行。
我想知道是否值得研究构建一个 NACL 插件来解决这个问题(即:使用 nacl_io)?
我是否应该期望使用基于 NACL 的解决方案从磁盘读取的速度明显快于 javascript?如果是这样,我应该期望什么样的加速(即:2x、5x 等)?
我对 javascript 的内部文件阅读器以及 NACL 流水线的细节了解不够,无法自己回答这些问题。
Native Client 在读取文件时连接到与 JavaScript 相同的底层 Chrome 接口,因此您可能不会看到显着的加速。此外,如果您在 Native Client 模块中读取数据,之后无论如何都需要将其发送到 JavaScript。
也就是说,也许你从磁盘读取的效率很低。如果您还没有尝试读取更大块的文件(尝试不同大小:64k、1m 等)。
无论如何您可能想要使用 Native Client 的原因有两个:
如果你也可以在 Native Client 模块中处理数据,并且处理当前是 CPU-bound 或可以并行处理。 Native Client 支持线程和进程内共享内存。 JavaScript 支持线程(通过 Workers),但目前只允许复制或传输 ArrayBuffer,不能共享它们。
如果您因为 JavaScript 代码在事件循环中没有让步而锁定网页,您可以使用 Native Client 从另一个线程读取文件。您可以在 Native Client 中阻止工作线程,而无需停止整个应用程序。