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

相關文章
相關標籤/搜索