使用过JSON对象的程序员最常作的一项工做即是,将JSON对象转化为字符串。该字符串的用途不少,例如可使用在WEB的URL中,在多个页面间进行传递。git
const obj = { id: 1, name: 'object' }; const jsonStr = JSON.stringify(obj); // 转换为字符串 const json = JSON.parse(jsonStr); // 解析字符串为JSON对象
对于这个转换过程咱们用的太驾轻就熟,因此不多再去思考这中间是否还有须要优化的地方。
其实只要稍微深刻思考一点,即便不读源代码,咱们也能得出这样一个结论:在JSON对象转化为字符串时,是须要去识别某种模式的。程序员
例如:github
const obj = [{ id: 1, name: 'kobe' }, { id: 2, name: 'wade' }]; const jsonStr = JSON.stringify(obj); // 结果为:[{"id":"1,"name":"kobe"},{"id":2,"name":"wade"}]
因此,若是要你去实现这样一个stringify的过程,这些类型的识别和标注都是不可避免的花销。json
就是在这样一个逻辑小片断上,fast-json-stringify想到了提升stringify效率的方案:提早定义要转换对象的模式,那么就能够省去解析模式的时间开销。优化
const fastJson = require('fast-json-stringify'); const stringify = fastJson({ title: 'player', type: 'object', properties: { name: { type: 'string' }, position: { type: 'string' }, age: { type: 'integer' } } }); console.log(stringify({ name: 'kobe', position: 'SG', age: 39 })); // {"name":"kobe","position":"SG","age":39}
从官网的介绍来看,在某些状况下使用fast-json-stringify的效果能够比JSON.stringify快接近10倍!ui
基于fast-json-stringify的优化内容,咱们很容易得出这样一个结论:在全部常常须要对某些固定模式进行stringify的场合,都适合使用fast-json-stringify。由于模式是固定的,那么定义模式的空间开销必定比使用该模式生成字符串的时间开销代价要小不少。spa