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