首页 > 软件开发 > JavaScript >

javascript如何使用Transferable

来源:互联网 2023-03-17 00:02:42 版权归原作者所有,如有侵权,请联系我们

本经验介绍在javascript前端开发中,如何使用Transferable。使用Transferable可以避免和worker线程通讯时的数据复制,提高效率。Nng办公区 - 实用经验教程分享!

javascript如何使用TransferableNng办公区 - 实用经验教程分享!

工具/原料

  • vscode 1.37.1

方法/步骤

  • 1

    首先,在MDN文档可以找到Transferable的介绍。注意到并不是所有的对象都能用Transferable方式传递。ArrayBuffer是可以的。Nng办公区 - 实用经验教程分享!

    javascript如何使用TransferableNng办公区 - 实用经验教程分享!

  • 1该信息未经许可获取自百度经验
  • 2

    举一个例子。写一个transferable-worker.js,用于作为演示的worker。其收到主线程的消息后,根据消息填充一个巨大的ArrayBuffer,然后发送到主线程。Nng办公区 - 实用经验教程分享!

    第一种发送方式是消息传递,并计时。Nng办公区 - 实用经验教程分享!

    javascript如何使用TransferableNng办公区 - 实用经验教程分享!

  • 3

    第二种发送方式是在第二个参数中给出Transferable列表,同样计时。Nng办公区 - 实用经验教程分享!

    javascript如何使用TransferableNng办公区 - 实用经验教程分享!

  • 4

    在主线程,假设onmessage处理函数的第一个参数是message,则直接访问message.data即可,用不用Transferable都是一样的。Nng办公区 - 实用经验教程分享!

    javascript如何使用TransferableNng办公区 - 实用经验教程分享!

  • 5

    经过测试,可以看到消息传递方式发送了一个120000000字节的数组用时30ms,而Transferable只需要0~1msNng办公区 - 实用经验教程分享!

    javascript如何使用TransferableNng办公区 - 实用经验教程分享!

  • 6

    查看两种方式的内存占用(在两个页面内分别使用消息传递3次、Transferable 3次),可以看到使用Transferable时,峰值内存360MB左右,不存在复制;而使用消息传递,则峰值使用了大约两倍内存。Nng办公区 - 实用经验教程分享!

    javascript如何使用TransferableNng办公区 - 实用经验教程分享!

  • 总结

  • 1

    1、首先,在MDN文档可以找到Transferable的介绍。注意到并不是所有的对象都能用Transferable方式传递。ArrayBuffer是可以的。

    Nng办公区 - 实用经验教程分享!

    2、举一个例子。写一个transferable-worker.js,用于作为演示的worker。其收到主线程的消息后,根据消息填充一个巨大的ArrayBuffer,然后发送到主线程。第一种发送方式是消息传递,并计时。

    Nng办公区 - 实用经验教程分享!

    3、第二种发送方式是在第二个参数中给出Transferable列表,同样计时。

    Nng办公区 - 实用经验教程分享!

    4、在主线程,假设onmessage处理函数的第一个参数是message,则直接访问message.data即可,用不用Transferable都是一样的。

    Nng办公区 - 实用经验教程分享!

    5、经过测试,可以看到消息传递方式发送了一个120000000字节的数组用时30ms,而Transferable只需要0~1ms

    Nng办公区 - 实用经验教程分享!

    6、查看两种方式的内存占用(在两个页面内分别使用消息传递3次、Transferable 3次),可以看到使用Transferable时,峰值内存360MB左右,不存在复制;而使用消息传递,则峰值使用了大约两倍内存。Nng办公区 - 实用经验教程分享!

  • 注意事项

    • 如果遇到问题,可以在下面提出疑问。

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!Nng办公区 - 实用经验教程分享!


    标签: JAVASCRIPT

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号