Bobolo
  • Home
  • Me

Serialization

Serialization 在前端领域的应用

6 Min Read

Mon Jan 17 2022

Written By Bobolo

Serialization(序列化)是一个有意思的问题,虽然在日常开发中已经听过或者使用过相关的技术,那如果说要解释一下什么是序列化?应该怎么回答,ObjectString ?

在前端方面,最让人熟知的与序列化有关的的 Api 就是 JSON.stringify,另一个 Api 则是 JSON.parse

序列化可以说是一个概念,并不是某个 Api,数据可以序列化为二进制、JSON String、XML。

为什么要 Serialization

序列化是将数据结构或对象状态转换为可以存储或传输的格式,反序列化则是将序列化后的格式还原为原始数据。从序列化的本质来看,主要是 存储传输

传输方面,不同程序通信时,会发送各种类型的数据,包括文本、图片、音频、视频等,但网络传输时是通过二进制序列的形式传输。所以需要将原有数据序列化,然后在接收端恢复。

存储方面,不同的机器、执行环境,可能有不同的数据处理方式,可能导致反序列化时出现问题,所以也需要序列化。

类似协议、加密解密,按一个规则转为字符串或者字节序列,然后再按相反的规则转回来

Serialization 应用

JSON.stringify 为例子,我们不主要探讨这个 Api 的设计,主要看前端方面日常可能会用到的场景

  • http,可能 BE 返回 JSON String,需要用 JSON.parse 进行解析或者需要 FE 在 POST 时将 JSON 用 JSON.stringify 为 String 再 POST
  • Web Storage,存储到 Web Storage 的数据都需要转 String,因此也需要将数据序列化
  • 深拷贝,用 JSON.stringify 和 JSON.parse 来做对象深拷贝,但这样性能并不好
  • 去重、过滤、判断,这些相对有点黑科技并不提倡,而且只能使用比较简单的数据结构

JSON.stringify 可以把 Json 转为 String,但它也有比较多的限制,如 undefined 、Date()、symbol 等都处理不好

Perception

扩展 JSON.stringify,目前的 undefined 会忽略,Date、Symbol 等无法正确处理,需要一个新的 Api,可以更好的包含现在有 Javascript 新的数据类型。

可以用来做 SSR 的状态传输,服务端中将数据或者状态进行序列化,然后在前端进行反序列化,现有的前端框架是否能使用这个思路去处理和解决部份的状态统一。

前端是否可以更进一步,不单单是 JSON 的序列化为 String,而是序列化为二进制或者字节,然后通过用 Stream 来进行传输或者 Lazy deserialization。

Powered by Bobolo

Copyright © Bobolo Blog 2021