使用JSON.stringify的思考使用过JSON对象的程序员最常见的任务之一就是将JSON对象转换成字符串。这个字符串有很多用途,比如可以用在WEB的URL中,在多个页面之间传递。constobj={id:1,name:'对象'};constjsonStr=JSON.stringify(obj);//转换为字符串constjson=JSON.parse(jsonStr);//parsestringtoJSONobjectfor我们使用这个转换过程非常得心应手,所以我们很少考虑是否还有优化的空间。其实只要我们稍微深入思考一下,即使不看源码,我们也可以得出这样的结论:在将JSON对象转换成字符串的时候,我们需要识别一定的模式。对于字符串类型,需要用双引号(")来标示。对于数字类型,则不需要标示。对于对象类型,需要用逗号(,)分隔各个属性,并且你需要双引号(")来标记它。对于数组类型,还需要加上“[”和“]”来表示例如:constobj=[{id:1,name:'kobe'},{id:2,name:'wade'}];constjsonStr=JSON.stringify(obj);//结果是:[{"id":"1,"name":"kobe"},{"id":2,"name":"wade"}]所以,如果你想当你实现这样一个stringify过程中,这些类型的识别和标注是不可避免的开销。使用fast-json-stringify就是在这么小的逻辑片段上。fast-json-stringify想到了一个提高stringify效率的方案:定义对象的模式到提前转换,这样可以节省解析模式的时间开销。constfastJson=require('fast-json-stringify');conststringify=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倍!使用场景基于fast-json-stringify的优化内容,我们很容易得出结论,fast-json-stringify适用于所有经常需要对一些固定模式进行字符串化的场合。因为模式是固定的,定义模式的空间开销肯定比使用模式生成字符串的时间开销小很多。
