聊聊 ES11 的新特征:浏览器重组比脚本重组更快,废除 Structured Cloning Algorithm

阅读时长 3 分钟读完

ES11,全称 ECMAScript 2020,是 JavaScript 的最新标准。它引入了一些新特性,其中包括从 Web Worker 线程中传递非结构化克隆数据的浏览器重组,以及废除 Structured Cloning Algorithm,以提高性能和稳定性。这些更新为 Web 开发者提供了更好的工具,以提高他们的效率并改进用户体验。在本文中,我们将深入探讨这些新功能,并提供示例代码和指导意义。

浏览器重组比脚本重组更快

在过去的 Web 发展中,传递数据常常会采用通过拷贝一个对象来对其克隆的方式。在大多数情况下,这是非常简单和有效的解决方案,但是在某些情况下可能会导致性能问题。在 ES11 中,我们引入了一种称为“浏览器重组”的新功能,这个新功能允许将数据在不同线程之间传递,而无需进行复制。这个新功能基于数据通信,允许 Web Worker 之间进行安全、高效、线程安全的通信。

传统的脚本重组(也称为结构化克隆)复制了整个数据结构,包括嵌套的对象和数组,这样就产生了很多开销。这样的克隆还有一个限制,就是它只适用于那些可序列化的对象和数据类型。而浏览器重组建立在新的 Atomics API 上,将把工作分配给不同线程,从而使浏览器在传递数据时的开销降到最低。

具体来说,浏览器重组可以快速地将对象传递给消费者线程,而不需要复制它。消费者线程将访问原始对象,而不是克隆副本。这大大提高了性能,因为消费者线程可以直接访问原始对象,而无需等待克隆完成。

下面是一个示例,演示了如何使用浏览器重组来传递一个字符串:

这个例子创建了一个 SharedString 对象,并在 1 秒钟后打印出了它的值。在传统的脚本重组中,我们可能会克隆此字符串并将克隆版本传递给另一个线程。但是,在浏览器重组中,我们只是将生成的 SharedString 对象传递给消费者线程。

废除 Structured Cloning Algorithm

有时候,我们需要把对象转换成字符串发送给服务器,然后在服务器上再重新创建对象。这可以通过结构化克隆算法(SCA)来实现。SCA 是一种序列化技术,可以将对象转换为字符串,以便在网络上传输。然而,随着 JavaScript 应用程序的不断增长,SCA 的性能已经成为一个问题,这是 ES11 中废除 SCA 的原因。这样,应用程序可以通过其他方式实现对发送的值的控制。

而废除 SCA 的好处则是可以减少序列化和反序列化的开销,增加应用程序的性能和稳定性。

下面是一个示例,展示如何使用 ES11 废除 SCA:

在这个例子中,我们创建了一个包含三个属性的对象。我们将对象转换为字符串,以便在网络上发送,然后在服务器上重新创建对象。这个过程非常简单,而且性能也非常好。

总结

ES11 引入了一些新特性,其中包括浏览器重组和废除 SCA。浏览器重组允许线程之间的数据传输更快,不需要进行复制,这提高了效率并减少了系统开销。废除 SCA 可以提高性能和稳定性,同时可以增加应用程序的灵活性。本文提供了一些示例和指导意义,以帮助 Web 开发者更好地了解和应用这些新功能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646555a5968c7c53b060ad23

纠错
反馈