أبطأ سلسلة في الكون المعروف. مجرد مزاح ، إنه الأسرع (:
TL ؛ د
تثبيت
كيف تعمل
تحذيرات
المعايير
تشغيل المعايير
آلة الاختبار
بعض الأرقام
الاستخدام
الأنواع المدعومة
تحديد مخطط
تحديد المخطط مع صفيف بسيط
تحديد المخطط مع صفيف معقد
تحديد المخطط مع الأشياء المتداخلة
مسلسلات
API
SJS
يهرب
رخصة
يُظهر SJS
زيادة كبيرة في الأداء على كل من JSON.stringify
و fast-json-stringify
. بالنسبة لبعض حالات الاستخدام (التعامل مع النص الطويل) ، فإنه يؤدي بشكل أسرع بنسبة 21000 ٪ من كل من الأصلي fast-json-stringify
.
ملاحظة: تمت إضافة دعم للخصائص غير المحددة من 1.0.1 . SJS
هو الآن الإنتاج جاهز.
معايير الخروج.
SJS
متوافق تمامًا مع كل من Node.js والمتصفح ؟؟
العقدة:
NPM تثبيت بطيئة json-stringify
على المتصفح:
<script src = "https://unpkg.com/slow-json-stringify/dist/sjs.umd.js"> </script>
لماذا SJS
هو أسرع stressifier؟ يتكون النهج التقليدي في تسلسل كل خاصية يتم اتخاذها بشكل فردي. يستخدم SJS
نهجًا مختلفًا للتسلسل.
تحضير:
يتم توفير مخطط
المخطط مقلوب
تم تصميم سلسلة templated مع المخطط المقدم.
التسلسل:
يتم إدخال قيم الكائن في القالب الذي تم إنشاؤه بالفعل.
إنه أسرع ببساطة لأنه يؤدي عملاً أقل بكثير.
تتطلب SJS
بعض أعمال الإعداد إذا ما قورنت مع JSON.stringify
الأصلي. ولكن ، إذا كنت تتعامل مع JSON مع بنية ثابتة ، فسيوفر لك SJS
الكثير من الوقت. خاصة عندما تنمو الحمولة. وبشكل لا يصدق عند تسلسل JSON مع نص طويل من الداخل (فكر في مقالة مدونة أو وصف للمنتج. علاوة على ذلك ، فإن SJS
يجعل من الممكن تسلسل الأنواع التي لا يتم دعمها أصليًا بواسطة JSON.stringify
بفضل المسلسلات المخصصة.
ملاحظة: لن تؤدي SJS
أي هروب لأنك عادة لا تحتاجها في حمولات صغيرة. إذا كنت تعمل مع نص كبير ، فقد يكون من الجهد القليل جدًا لتخزينه في نص DB الخاص بك بنص هرب بالفعل.
ومع ذلك ، يوفر SJS
فائدة صغيرة لاحتياجاتك الهاربة. يستخدم escape
regex الافتراضي إذا لم يتم توفير regex إضافية.
سلسلة regex الافتراضية:
/n | r | t | "| /gm
يمكنك استخدام escape
مثل ما يلي:
const {Escape} = require ('Slow-json-stringify') ؛ // إذا لم تمر أي إعادة إمكانية إضافية ، فسيتم استخدام افتراضي. ') ؛ // هذا هو "مضحك" // يمكنك تمرير أي regex التي تريدها لاستراتيجية الهروب الخاصة بك.
نعلم جميعًا أن هناك ثلاثة أنواع من الأكاذيب ..
الأكاذيب ، الكذب الملعون .. والمعايير.
تذكر أن تختبر ما إذا كان SJS
يمكن أن يكون تحسنا حقيقيا لحالة الاستخدام الخاصة بك. نظرًا لوجود أوقات لا يمكن فيها أن تكون مزايا الأداء مع العيوب الإضافية تستحق ذلك.
كل معيار قابل للتكرار على الجهاز الخاص بك. لتشغيل اختباراتك:
استنساخ هذا الريبو.
تثبيت التبعيات.
cd benchmark
.
منح الحقوق القابلة للتنفيذ في run.sh
Script chmod +x ./run.sh
.
حفظ النتائج القياسية إلى ملف ./run.sh >> benchmark.md
تم إجراء المعايير على Dell XPS 15 9550.
وحدة المعالجة المركزية: Intel I7 6700HQ
رام: 16 جيجابايت
OS: Ubuntu 18.04
معايير الخروج هنا
يحدث إنشاء المخطط بفضل المساعد attr
الذي تم تصديره من الحزمة الرئيسية.
const {attr} = require ('sjs') ؛
attr (النوع ، المسلسل؟)
يدعم المساعد attr
أصلاً الأنواع التالية:
string
number
boolean
null
array
، صفيف ديناميكي بهيكل بسيط ، في هذا السيناريو ، سيتم استخدام JSON.stringify
. لأنه لا توجد مزايا الأداء الحقيقية.
التسلسل لأي نوع آخر ممكن بفضل المسلسلات المخصصة.
للحصول على سلسلة صحيحة لحمولة JSON الخاصة بك ، يكون المخطط الصحيح إلزاميًا. تحديد مخطط مفيد إلى حد ما وليس مطوّلة على الإطلاق.
const {sjs} = require ('Slow-json-stringify') ؛ // schema definistconst struction = sjs ({ ج: attr ('string') ، ب: attr ('رقم') ، C: attr ('boolean') ،}) ؛ // ثم يمكنك تبديل أي شيء مع هذا الهيكل. stringify ({ ج: "العالم" ، ب: 42 ، ج: صواب ،}) ؛ // {"a": "world" ، "b": 42 ، "c": true}
عند تصريج Simple Array JSON.stringify
سيتم استخدامها داخليًا.
const {sjs} = require ('Slow-json-stringify') ؛ // schema definistconst struction = sjs ({ ج: attr ('array') ،}) ؛ // ثم يمكنك تبديل أي شيء بهذا الهيكل. stringify ({ ج: [1 ، 2 ، 3 ، صحيح ، 'العالم'] ،}) ؛ // {"a": [1،2،3 ، صواب ، "العالم"]}
يقبل مساعد attr
مخطط sjs
إضافي لخصائص array
.
const {sjs} = require ('Slow-json-stringify') ؛ // schema definistconst struction = sjs ({ ج: attr ('array' ، sjs ({b: array ('string') ، c: array ('number') ، }))}) ؛ // ثم يمكنك تهيئة أي شيء باستخدام هذا الهيكل. stringify ({ A: [{B: 'Ciao1' ، C: 1 ، } ، {b: 'ciao2' ، c: 2 ، } ، {b: 'ciao3' ، c: 3 ، } ، {b: 'ciao4' ، c: 4 ، }] ،}) ؛ // {"a": [{"b": "ciao1" ، "c": 1} ، {"b": : "CIAO3" ، "C": 3} ، {"B": "CIAO4" ، "C": 4}]}
تحديد المخططات مع الأشياء المتداخلة أمر واضح ومباشر.
const {sjs} = require ('Slow-json-stringify') ؛ // schema definistconst struction = 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
وظيفة المسلسل. يتم استدعاء وظيفة المسلسل بالقيمة الحقيقية التي يجب أن يتم تشكيلها.
المسلسل (Rawvalue)
من المفيد إجراء مسلسلات العقارات في إجراء التسلسل المخصص على أي نوع توفير غير مدعوم أصليًا حتى بواسطة JSON.stringify
(التواريخ ، التعبيرات العادية). يمكن استخدامها أيضًا لتخطي الممتلكات Serializarion عند العودة undefined
.
const {sjs} = require ('Slow-json-stringify') ؛ // schema definistconst struction = sjs ({ a: attr ('number' ، (value) => {if (value> 10) {return value ؛} return undefined ؛ )
استخدام الحالة: تسلسل أي نوع.
// DateSconst stringify = sjs ({ التاريخ: attr ('string' ، (value) => value.tolocalestring ()) ،}) ؛ // regexpconst stringify = sjs ({ regexp: attr ('string' ، (value) => value.toString ()) ،}) ؛
استخدام الحالة: تخصيص الحمولات النافعة بناءً على حقوق الوصول.
const struckify = sjs ({ PublicProp: attr ('String') ، مقيدة: attr ('string' ، (value) => isAdmin؟ القيمة: غير محدد) ،}) ؛
استخدام الحالة: تنسيق القيمة
const struckify = sjs ({ prop: attr ('string' ، (value) => value.toupperCase ()) ،}) ؛
بارام | يكتب | مطلوب | تقصير | المواصفات |
---|---|---|---|---|
مخطط | هدف | نعم | غير محدد | المخطط الذي يحدد سلوك الوترات. |
بارام | يكتب | مطلوب | تقصير | المواصفات |
---|---|---|---|---|
يكتب | خيط | نعم | غير محدد | نوع العقار. |
المسلسل | وظيفة | لا | هوية | الوظيفة المستخدمة للتسلسل / التحقق من صحة الخصائص. |
بارام | يكتب | مطلوب | تقصير | المواصفات |
---|---|---|---|---|
Regex | تعبير منتظم | لا | regex الافتراضي | regex تستخدم للهروب من النص |
معهد ماساتشوستس للتكنولوجيا.