Stringifier paling lambat di alam semesta yang dikenal. Hanya bercanda, ini yang tercepat (:
Tl; dr
Instalasi
Cara kerjanya
Peringatan
Tolok ukur
Menjalankan tolok ukur
Mesin uji
Beberapa angka
Penggunaan
Tipe yang didukung
Mendefinisikan skema
Menentukan skema dengan array sederhana
Mendefinisikan skema dengan array yang kompleks
Mendefinisikan skema dengan benda bersarang
Serializer
API
SJS
melarikan diri
Lisensi
SJS
menunjukkan peningkatan kinerja yang signifikan dibandingkan JSON.stringify
Native. Stringify dan fast-json-stringify
. Untuk beberapa kasus penggunaan (berurusan dengan teks panjang), ia berkinerja 21000% lebih cepat daripada penduduk asli dan fast-json-stringify
.
Catatan: Dukungan untuk properti yang tidak ditentukan telah ditambahkan dari 1.0.1 . SJS
sekarang siap produksi.
Benchmark Checkout.
SJS
sepenuhnya kompatibel dengan kedua node.js dan browser ??
Node:
NPM menginstal lambat-json-stringify
Di browser:
<skrip src = "https://unpkg.com/slow-json-stringify/dist/sjs.umd.js"> </script>
Mengapa SJS
adalah stringifier tercepat? Pendekatan tradisional terdiri dalam membuat serial setiap properti yang diambil secara tunggal. SJS
menggunakan pendekatan yang berbeda untuk serialisasi.
Persiapan:
Skema disediakan
Skema ini dirangkai
String templated dibangun dengan skema yang disediakan.
Serialisasi:
Nilai objek dimasukkan ke dalam templat yang sudah dibangun.
Ini lebih cepat hanya karena melakukan pekerjaan yang jauh lebih sedikit.
SJS
memerlukan beberapa pekerjaan pengaturan jika dibandingkan dengan JSON.stringify
asli. Tetapi, jika Anda berurusan dengan JSON dengan struktur tetap SJS
akan menghemat banyak waktu. Terutama saat muatan tumbuh. Dan luar biasa ketika membuat serial JSON dengan teks panjang di dalam (pikirkan artikel blog atau deskripsi produk. Selain itu, SJS
memungkinkan serialisasi jenis yang tidak didukung secara alami oleh JSON.stringify
. STRINGY Berkat serializer khusus.
Catatan: SJS
tidak akan melakukan pelarian karena Anda biasanya tidak membutuhkannya dalam muatan kecil. Jika Anda bekerja dengan teks besar, itu bisa sangat sedikit upaya untuk menyimpan di DB Anda sebuah teks yang sudah melarikan diri.
Namun, SJS
memberikan sedikit utilitas untuk kebutuhan melarikan diri Anda. escape
menggunakan regex default jika tidak ada regex tambahan disediakan.
String Regex default:
/n | r | t | "| /gm
Anda dapat menggunakan escape
seperti berikut:
const {Escape} = membutuhkan ('slow-json-stringify'); // Jika Anda tidak melewati regex tambahan, default akan digunakan. Escaper const = Escape (); Escaper ('Ini "lucu" '); // Ini "lucu" // Anda dapat melewati regex apa pun yang Anda inginkan untuk strategi pelarian Anda. Customescaper = Escape (/"/gm); Customescaper ('Ini" lucu "); // Ini" lucu "
Kita semua tahu bahwa ada tiga jenis kebohongan ..
Kebohongan, kebohongan terkutuk .. dan tolok ukur.
Ingatlah untuk menguji apakah SJS
bisa menjadi peningkatan nyata untuk kasus penggunaan Anda. Karena ada saat -saat ketika kinerja keunggulan dengan kelemahan tambahan tidak bisa sepadan.
Setiap tolok ukur dapat ditiru di mesin Anda sendiri. Untuk menjalankan tes Anda:
Klone repo ini.
Instal dependensi.
cd benchmark
.
Hibah hak yang dapat dieksekusi untuk run.sh
skrip chmod +x ./run.sh
.
Simpan Hasil Benchmark Untuk File ./run.sh >> benchmark.md
Tolok ukur dilakukan pada Dell XPS 15 9550.
CPU: Intel I7 6700HQ
RAM: 16GB
OS: Ubuntu 18.04
Checkout Benchmark di sini
Penciptaan skema terjadi berkat helper attr
yang diekspor dari bundel utama.
const {attr} = membutuhkan ('sjs');
attr (type, serializer?)
The attr
Helper secara asli mendukung tipe -tipe berikut:
string
number
boolean
null
array
, array dinamis dengan struktur sederhana, dalam skenario ini JSON.stringify
akan digunakan. Karena tidak ada keuntungan kinerja yang nyata.
Serialisasi jenis lain dimungkinkan berkat serializer khusus.
Untuk stringifikasi yang benar dari muatan JSON Anda, skema yang benar adalah wajib. Mendefinisikan skema cukup berguna dan tidak bertele -tele sama sekali.
const {sjs} = membutuhkan ('slow-json-stringify'); // skema definisicons stringify = sjs ({ A: attr ('string'), B: attr ('nomor'), c: attr ('boolean'),}); // maka Anda dapat merangkai apa pun dengan struktur itu.stringify ({ A: 'Dunia', B: 42, C: true,}); // {"a": "world", "b": 42, "c": true}
Saat merangkai array sederhana JSON.stringify
akan digunakan secara internal.
const {sjs} = membutuhkan ('slow-json-stringify'); // skema definisicons stringify = sjs ({ A: attr ('array'),}); // Kemudian Anda dapat merangkai apa pun dengan struktur itu.stringify ({ A: [1, 2, 3, true, 'world'],}); // {"a": [1,2,3, true, "world"]}
Helper attr
menerima skema sjs
tambahan untuk properti array
.
const {sjs} = membutuhkan ('slow-json-stringify'); // skema definisicons stringify = sjs ({ A: attr ('array', sjs ({b: array ('string'), c: array ('number'), }))}); // maka Anda dapat merangkai apa pun dengan struktur itu.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}]}
Menentukan skema dengan benda bersarang cukup mudah.
const {sjs} = membutuhkan ('slow-json-stringify'); // skema definisicons stringify = sjs ({ A: {b: {c: attr ('string'),}, }, d: {e: attr ('number'), },}); stringify ({ A: {b: {c: 'halo',}, }, D: {E: 42, },}); // {"a": {"b": {"c": "halo"}}, "d": {"e": 42}}
Helper attr
menerima fungsi serializer. Fungsi serializer dipanggil dengan nilai nyata yang harus diperagakan.
Serializer (RawValue)
Serializer properti berguna untuk melakukan serialisasi khusus pada jenis apa pun yang tidak disediakan secara asli bahkan oleh JSON.stringify
(tanggal, ekspresi reguler). Mereka dapat digunakan juga untuk melewatkan serializarion properti saat kembali undefined
.
const {sjs} = membutuhkan ('slow-json-stringify'); // skema definisicons stringify = sjs ({ a: attr ('number', (value) => {if (value> 10) {return value;} return tidak terdefinisi; })}); stringify ({a: 20}); // {"a": 20} stringify ({a: 5}); // {}
Use Case: Serialisasi jenis apa pun.
// DateSconst stringify = sjs ({ Tanggal: attr ('string', (value) => value.tolocaleString ()),}); // regexpconst stringify = sjs ({ regexp: attr ('string', (value) => value.toString ()),});
Use Case: Kustomisasi muatan berdasarkan hak akses.
const stringify = sjs ({ PublicProp: attr ('string'), terbatasprop: attr ('string', (value) => isAdmin? Nilai: tidak terdefinisi),});
Use case: format nilai
const stringify = sjs ({ prop: attr ('string', (value) => value.touppercase ()),});
param | jenis | diperlukan | bawaan | spec |
---|---|---|---|---|
skema | obyek | Ya | belum diartikan | Skema yang mendefinisikan perilaku stringifikasi. |
param | jenis | diperlukan | bawaan | spec |
---|---|---|---|---|
jenis | rangkaian | Ya | belum diartikan | Jenis properti. |
Serializer | fungsi | TIDAK | identitas | Fungsi digunakan untuk serialisasi / validasi properti. |
param | jenis | diperlukan | bawaan | spec |
---|---|---|---|---|
Regex | Ekspresi reguler | TIDAK | Regex default | Regex digunakan untuk melarikan diri dari teks |
Mit.