摘要:使用的思考使用過對(duì)象的程序員最常做的一項(xiàng)工作便是,將對(duì)象轉(zhuǎn)化為字符串。該字符串的用途很多,例如可以使用在的中,在多個(gè)頁面間進(jìn)行傳遞。因?yàn)槟J绞枪潭ǖ?,那么定義模式的空間開銷一定比使用該模式生成字符串的時(shí)間開銷代價(jià)要小很多。
使用JSON.stringify的思考
使用過JSON對(duì)象的程序員最常做的一項(xiàng)工作便是,將JSON對(duì)象轉(zhuǎn)化為字符串。該字符串的用途很多,例如可以使用在WEB的URL中,在多個(gè)頁面間進(jìn)行傳遞。
const obj = { id: 1, name: "object" }; const jsonStr = JSON.stringify(obj); // 轉(zhuǎn)換為字符串 const json = JSON.parse(jsonStr); // 解析字符串為JSON對(duì)象
對(duì)于這個(gè)轉(zhuǎn)換過程我們用的太得心應(yīng)手,所以很少再去思考這中間是否還有需要優(yōu)化的地方。
其實(shí)只要稍微深入思考一點(diǎn),即使不讀源代碼,我們也能得出這樣一個(gè)結(jié)論:在JSON對(duì)象轉(zhuǎn)化為字符串時(shí),是需要去識(shí)別某種模式的。
對(duì)于string類型,需要用雙引號(hào)(")去標(biāo)注
對(duì)于number類型,不需要標(biāo)注
對(duì)于object類型,它的每個(gè)屬性間需要用逗號(hào)(,)去分隔,并且需要雙引號(hào)(")進(jìn)行標(biāo)注
對(duì)于array類型,則還需要加上"["和"]"來表示
例如:
const obj = [{ id: 1, name: "kobe" }, { id: 2, name: "wade" }]; const jsonStr = JSON.stringify(obj); // 結(jié)果為:[{"id":"1,"name":"kobe"},{"id":2,"name":"wade"}]
所以,如果要你去實(shí)現(xiàn)這樣一個(gè)stringify的過程,這些類型的識(shí)別和標(biāo)注都是不可避免的花銷。
使用fast-json-stringify就是在這樣一個(gè)邏輯小片段上,fast-json-stringify想到了提高stringify效率的方案:提前定義要轉(zhuǎn)換對(duì)象的模式,那么就可以省去解析模式的時(shí)間開銷。
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}
從官網(wǎng)的介紹來看,在某些情況下使用fast-json-stringify的效果可以比JSON.stringify快接近10倍!
基于fast-json-stringify的優(yōu)化內(nèi)容,我們很容易得出這樣一個(gè)結(jié)論:在所有經(jīng)常需要對(duì)某些固定模式進(jìn)行stringify的場(chǎng)合,都適合使用fast-json-stringify。因?yàn)槟J绞枪潭ǖ?,那么定義模式的空間開銷一定比使用該模式生成字符串的時(shí)間開銷代價(jià)要小很多。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/99919.html
摘要:然后,生成的完整的字符串大致如下以上是一系列通用的鍵值轉(zhuǎn)換方法就是的主體函數(shù)其他屬性的拼接最后,將字符串傳入構(gòu)造函數(shù)來創(chuàng)建相應(yīng)的函數(shù)。 1. 熟悉的JSON.stringify() 在瀏覽器端或服務(wù)端,JSON.stringify()都是我們很常用的方法: 將 JSON object 存儲(chǔ)到 localStorage 中; POST 請(qǐng)求中的 JSON body; 處理響應(yīng)體中的 ...
摘要:什么是是一個(gè)高度專注于以最少開銷和強(qiáng)大的插件架構(gòu),為開發(fā)人員提供最佳體驗(yàn)的框架。它受到了和的啟發(fā),是目前最快的框架之一。 什么是 Fastify? Fastify 是一個(gè)高度專注于以最少開銷和強(qiáng)大的插件架構(gòu),為開發(fā)人員提供最佳體驗(yàn)的 Web 框架。 它受到了 Hapi 和 Express 的啟發(fā),是目前最快的 Node 框架之一。 Fastify 獨(dú)特的將 JSON Schema 應(yīng)...
摘要:簡析簡介,是一種數(shù)據(jù)格式而不是編程語言,它和并沒有從屬關(guān)系,任何編程語言都可以使用語法規(guī)則分為三類簡單值與語法相同,可以在中表示字符串,數(shù)值,布爾值和,但是其不支持?jǐn)?shù)值字符串對(duì)象鍵值和鍵名都得用雙引號(hào)數(shù)組解析和序列化目標(biāo)對(duì)象,過濾器,字符串 JSON簡析 1.簡介 JSON,是一種數(shù)據(jù)格式而不是編程語言,它和JavaScrip并沒有從屬關(guān)系,任何編程語言都可以使用JSON; 2.語法...
摘要:說句玩笑話,如果是基于的,可能就叫了,形式可能就是這樣的了,如果這樣,那么可能現(xiàn)在是和比較密切了。此外,還有一個(gè)函數(shù),我們較少看到,但是它會(huì)影響。 我們先來看一個(gè)JS中常見的JS對(duì)象序列化成JSON字符串的問題,請(qǐng)問,以下JS對(duì)象通過JSON.stringify后的字符串是怎樣的?先不要急著復(fù)制粘貼到控制臺(tái),先自己打開一個(gè)代碼編輯器或者紙,寫寫看,寫完再去仔細(xì)對(duì)比你的控制臺(tái)輸出,如果有...
摘要:使用遍歷數(shù)組有三點(diǎn)問題遍歷順序不固定引擎不保證對(duì)象的遍歷順序。作為原生函數(shù),和自身操作字符串的速度是很快的。由于沒有返回值返回,所以它的回調(diào)函數(shù)通常是包含副作用的,否則這個(gè)寫了毫無意義。接受一個(gè)回調(diào)函數(shù),你可以提前,相當(dāng)于手寫循環(huán)中的。 不要用 for_in 遍歷數(shù)組 這是 JavaScript 初學(xué)者常見的誤區(qū)。for_in 用于遍歷對(duì)象中包括原型鏈上的所有可枚舉的(enumerab...
閱讀 4365·2021-11-24 10:24
閱讀 1409·2021-11-22 15:22
閱讀 2038·2021-11-17 09:33
閱讀 2428·2021-09-22 15:29
閱讀 515·2019-08-30 15:55
閱讀 1652·2019-08-29 18:42
閱讀 2731·2019-08-29 12:55
閱讀 1772·2019-08-26 13:55