JS使用技巧1——使用fast-json-stringify代替JSON.stringify

使用JSON.stringify的思考

使用过JSON对象的程序员最常作的一项工做即是,将JSON对象转化为字符串。该字符串的用途不少,例如可使用在WEB的URL中,在多个页面间进行传递。git

const obj = { id: 1, name: 'object' };
const jsonStr = JSON.stringify(obj);    // 转换为字符串
const json = JSON.parse(jsonStr);     // 解析字符串为JSON对象

对于这个转换过程咱们用的太驾轻就熟,因此不多再去思考这中间是否还有须要优化的地方。
其实只要稍微深刻思考一点,即便不读源代码,咱们也能得出这样一个结论:在JSON对象转化为字符串时,是须要去识别某种模式的。程序员

  • 对于string类型,须要用双引号(")去标注
  • 对于number类型,不须要标注
  • 对于object类型,它的每一个属性间须要用逗号(,)去分隔,而且须要双引号(")进行标注
  • 对于array类型,则还须要加上"["和"]"来表示

例如: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

就是在这样一个逻辑小片断上,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

相关文章
相关标签/搜索