알려진 우주에서 가장 느린 줄무늬. 농담, 그것은 가장 빠릅니다 (:
tl; dr
설치
작동 방식
경고
벤치 마크
벤치 마크를 실행합니다
테스트 머신
일부 숫자
용법
지원되는 유형
스키마 정의
간단한 배열로 스키마 정의
복잡한 배열로 스키마 정의
중첩 된 객체로 스키마 정의
직렬화제
API
SJS
탈출하다
특허
SJS
기본 JSON.stringify
및 fast-json-stringify
에 비해 성능이 크게 향상되었습니다. 일부 사용 사례 (긴 텍스트 처리)의 경우 기본 및 fast-json-stringify
보다 21000% 더 빠릅니다.
참고 : 정의되지 않은 속성에 대한 지원은 1.0.1 에서 추가되었습니다. SJS
이제 생산 준비가되었습니다.
체크 아웃 벤치 마크.
SJS
Node.js 및 브라우저와 완전히 호환됩니다.
마디:
NPM Slow-JSON-Stringify 설치
브라우저에서 :
<script src = "https://unpkg.com/slow-json-stringify/dist/sjs.umd.js"> </script>
왜 SJS
가장 빠른 stringifier입니까? 전통적인 접근법은 단수로 취한 모든 속성을 직렬화하는 것으로 구성됩니다. SJS
직렬화에 대한 다른 접근법을 사용합니다.
준비:
스키마가 제공됩니다
스키마가 줄어 듭니다
템플릿 문자열은 제공된 스키마로 구축됩니다.
직렬화 :
객체 값은 이미 제작 된 템플릿에 삽입됩니다.
작업이 훨씬 적기 때문에 더 빠릅니다.
SJS
기본 JSON.stringify
와 비교할 때 일부 설정 작업이 필요합니다. 그러나 고정 된 구조로 JSON을 다루는 경우 SJS
많은 시간을 절약 할 수 있습니다. 특히 페이로드가 자랄 때. 그리고 텍스트가 긴 텍스트로 JSON을 직렬화 할 때 (블로그 기사 나 제품 설명을 생각하십시오. 또한 SJS
CUSTAL SERIALIZERS 덕분에 JSON.stringify
에서 기본적으로 지원되지 않는 유형의 직렬화를 가능하게합니다.
참고 : SJS
일반적으로 작은 페이로드로 필요하지 않으므로 탈출을 수행하지 않습니다. 큰 텍스트로 작업하는 경우 DB에 이미 탈출 한 텍스트를 저장하는 것은 거의 노력할 수 없습니다.
그러나 SJS
탈출 요구에 약간의 유용성을 제공합니다. 추가 Regex가 제공되지 않으면 escape
기본 Regex를 사용합니다.
기본 Regex 문자열 :
/n | r | t | "| /gm
다음과 같이 escape
사용할 수 있습니다.
const {탈출} = require ( 'slow-json-stringify'); // 추가 regex를 전달하지 않으면 기본값이 사용됩니다. '); // 이것은 "재미있는"것입니다. // 당신은 당신의 탈출 전략에 원하는 모든 정규식을 통과 할 수 있습니다.
우리 모두는 세 가지 종류의 거짓말이 있다는 것을 알고 있습니다 ..
거짓말, 저주받은 거짓말 .. 그리고 벤치 마크.
SJS
사용 사례를 실제로 개선 할 수 있는지 테스트해야합니다. 추가 된 단점의 성능 장점이 그만한 가치가없는 경우가 있기 때문입니다.
모든 벤치 마크는 자신의 기계에서 복제 할 수 있습니다. 테스트를 실행하려면 :
이 저장소를 복제하십시오.
종속성을 설치하십시오.
cd benchmark
.
run.sh
스크립트 chmod +x ./run.sh
에 대한 실행 권한을 부여합니다.
벤치 마크 결과를 파일에 저장 ./run.sh >> benchmark.md
벤치 마크는 Dell XPS 15 9550에서 수행되었습니다.
CPU : 인텔 i7 6700hq
RAM : 16GB
OS : 우분투 18.04
여기에서 체크 아웃 벤치 마크
스키마 생성은 메인 번들에서 내보내는 attr
Helper 덕분에 발생합니다.
const {attr} = require ( 'sjs');
attr (유형, 시리얼 라이저?)
attr
Helper는 기본적으로 다음 유형을 지원합니다.
string
number
boolean
null
이 시나리오에서 기본 JSON.stringify
사용됩니다 array
실질적인 성능 장점은 없습니다.
맞춤형 직렬화 덕분에 다른 유형의 직렬화가 가능합니다.
JSON 페이로드의 올바른 교활하려면 올바른 스키마가 필수입니다. 스키마를 정의하는 것은 매우 편리하며 전혀 장황하지 않습니다.
const {sjs} = require ( 'slow-json-stringify'); // schema definitionconst stringify = sjs ({ A : attr ( 'String'), B : attr ( 'number'), C : attr ( 'boolean'),}); // 그러면 해당 구조로 무엇이든 string을 할 수 있습니다 .Stringify ({{ A : '세계', B : 42, C : true,}); // { "A": "World", "B": 42, "C": True}
간단한 배열 JSON.stringify
내부적으로 사용됩니다.
const {sjs} = require ( 'slow-json-stringify'); // schema definitionconst stringify = sjs ({ A : attr ( 'array'),}); // 그러면 해당 구조로 무엇이든 stringsify.stringify ({{ A : [1, 2, 3, True, 'World'],}); // { "A": [1,2,3, True, "World"]}
attr
Helper는 array
속성에 대한 추가 sjs
스키마를 수용합니다.
const {sjs} = require ( 'slow-json-stringify'); // schema definitionconst stringify = sjs ({ A : att }))}); // 그러면 해당 구조로 무엇이든 stringify.stringify ({{ A : [{b : 'ciao1', c : 1, }, {b : 'ciao2', c : 2, }, {b : 'ciao3', c : 3, }, {b : 'ciao4', c : 4, }],}); // { "a": [{ "b": "ciao1", "c": 1}, { "b": "ciao2", "c": 2}, { "b" : "ciao3", "c": 3}, { "b": "ciao4", "c": 4}]}
중첩 된 물체로 스키마를 정의하는 것은 매우 간단합니다.
const {sjs} = require ( 'slow-json-stringify'); // schema definitionconst stringify = sjs ({ A : {b : {c : attr ( 'string'),}, }, D : {e : attr ( 'number'), },}); stringify ({{ A : {B : {C : 'Hello',}, }, D : {e : 42, },}); // { "a": { "b": { "c": "hello"}}, "d": { "e": 42}}
attr
Helper는 시리얼 라이저 기능을 수락합니다. 세리어 리저 기능은 소싱 해야하는 실제 값으로 호출됩니다.
시리얼 라이저 (RawValue)
속성 직렬화기는 JSON.stringify
(날짜, 정규 표현식)에서도 기본적으로 지원하지 않는 공급 유형에서 사용자 정의 직렬화를 수행하는 데 유용합니다. undefined
반환시 재산 시리얼 리조 리온을 건너 뛰는 데 사용될 수 있습니다.
const {sjs} = require ( 'slow-json-stringify'); // schema definitionconst stringify = sjs ({ A : attr ( 'number', (value) => {if (value> 10) {return value;} return undefined; })}); Stringify ({a : 20}); // { "a": 20} stringify ({a : 5}); // {}
사용 사례 : 모든 유형의 직렬화.
// DatesConst stringify = sjs ({ 날짜 : att regexp : attr ( 'string', (value) => value.toString ()),});
사용 사례 : 액세스 권한을 기반으로 페이로드를 사용자 정의합니다.
const stringify = sjs ({ publprop : attr ( 'string'), restiveProp : attr ( 'string', (value) => isadmin? value : undefined),});
유스 케이스 : 값 형식
const stringify = sjs ({ prop : attr ( 'string', (value) => value.toupperCase ()),});
파라 | 유형 | 필수의 | 기본 | 투기 |
---|---|---|---|---|
개요 | 물체 | 예 | 한정되지 않은 | 현악 동작을 정의하는 스키마. |
파라 | 유형 | 필수의 | 기본 | 투기 |
---|---|---|---|---|
유형 | 끈 | 예 | 한정되지 않은 | 속성의 유형. |
시리얼 라이저 | 기능 | 아니요 | 신원 | 속성 직렬화 / 검증에 사용되는 기능. |
파라 | 유형 | 필수의 | 기본 | 투기 |
---|---|---|---|---|
리그 즈 | 정규 표현 | 아니요 | 기본 정규식 | Regex는 텍스트를 탈출하는 데 사용되었습니다 |
MIT.