已知宇宙中最慢的弦乐器。只是开玩笑,这是最快的(:
tl; dr
安装
它如何工作
警告
基准
运行基准
测试机
一些数字
用法
支持类型
定义模式
用简单数组定义模式
用复杂阵列定义模式
用嵌套对象定义模式
连续化器
API
SJS
逃脱
执照
SJS
比天然JSON.stringify
和fast-json-stringify
显示出显着提高的性能。对于某些用例(处理长文本),它的性能比本机和fast-json-stringify
快21000% 。
注意:对未定义属性的支持已从1.0.1添加。 SJS
现在已经准备好生产了。
结帐基准。
SJS
与node.js和浏览器都完全兼容?
节点:
npm安装慢速划分
在浏览器上:
<script src =“ https://unpkg.com/slow-json-stringify/dist/sjs.umd.js”> </script>
为什么SJS
是最快的弦乐器?传统方法包括序列化的每个属性。 SJS
使用另一种方法来序列化。
准备:
提供了模式
架构已串制
使用提供的架构构建一个模板字符串。
序列化:
对象值插入已经构建的模板中。
它之所以更快,仅仅是因为它的工作要少得多。
与本机JSON.stringify
相比, SJS
需要一些设置工作。但是,如果您正在与JSON打交道, SJS
使用固定结构来节省大量时间。特别是当有效载荷增长时。令人难以置信的是,当序列化的JSON具有长文本内部(想想博客文章或产品描述。此外, SJS
使得序列化的序列化不受JSON.stringify
的本地支持,这要归功于自定义的序列化。
注意: SJS
不会执行任何逃脱,因为您通常在少量有效载荷中不需要它。如果您正在使用大文字,那么将已经逃脱的文本存储在您的DB中可能几乎没有努力。
但是, SJS
为您的逃避需求提供了一些实用程序。如果没有提供其他正则义务, escape
使用默认的正则义务。
默认的正则正则字符串:
/n | r | t |“ | /gm
您可以像以下内容一样使用escape
:
const {easce} = require('slow-json-stringify'); //如果您不传递任何其他正则义务,则将使用一个默认的正则是。 '); //这是“有趣的” //您可以通过您想要的逃脱策略的任何正则义务。
我们都知道有三种谎言。
谎言,该死的谎言和基准。
请记住测试SJS
是否可以对您的用例进行真正的改进。因为有时候,具有增加缺点的性能优势是不值得的。
每个基准测试都可以在您自己的机器上复制。进行测试:
克隆这个仓库。
安装依赖项。
cd benchmark
。
授予run.sh
脚本chmod +x ./run.sh
的可执行权。
将基准结果保存到file ./run.sh >> benchmark.md
基准测试是在Dell XPS 15 9550上进行的。
CPU: Intel I7 6700HQ
RAM: 16GB
OS: Ubuntu 18.04
在这里结帐基准
该模式创建发生了,这要归功于从主捆绑中导出的attr
助手。
const {attr} = require('sjs');
attr(类型,序列化器?)
attr
Helper本地支持以下类型:
string
number
boolean
null
array
,动态数组具有简单结构,在这种情况下,将使用本机JSON.stringify
。由于没有真正的性能优势。
由于自定义的序列化器,任何其他类型的序列化都是可能的。
对于正确的JSON有效载荷的正确串联,必须使用正确的架构。定义模式非常方便,根本不是冗长的。
const {sjs} = require('slow-json-stringify'); // schema definityconconstringify = sjs({{ 答:attr('string'), B:attr('number'), c:attr('boolean'),}); //然后,您可以使用该结构串起任何东西。 答:“世界”, B:42, c:true,}); // {“ a”:“ world”,“ b”:42,“ c”:true}
当串制简单JSON.stringify
时,将在内部使用。
const {sjs} = require('slow-json-stringify'); // schema definityconconstringify = sjs({{ 答:attr('array'),}); //然后,您可以使用该结构串起任何内容。 答:[1,2,3,true,'world'],}); // {“ a”:[1,2,3,true,``world'']}
attr
Helper接受array
属性的附加sjs
架构。
const {sjs} = require('slow-json-stringify'); // schema definityconconstringify = sjs({{ a:attr('array',sjs({b:array('string'),c:array('number'), }))}); //您可以用该结构串起任何东西。Stringify({ 答:[{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 definityconconstringify = sjs({{{ a:{b:{c:attr('string'),}, },, D:{e:attr('number'), },}); stringify({ a:{b:{c:'hello',}, },, D:{E:42, },}); // {“
attr
Helper接受序列化功能。序列化函数与应串制的真实值一起调用。
序列化器(RAWVALUE)
属性序列化器对于即使由JSON.stringify
(日期,正则表达式)对任何提供的类型进行自定义序列化非常有用。当返回undefined
时,它们也可用于跳过属性序列化。
const {sjs} = require('slow-json-stringify'); // schema definityconconstringify = sjs({{{ a:attr('number',(value)=> {if(value> 10){return value;} return undefined; })}); stringify({a:20}); // {“ a”:20} stringify({a:5}); // {}
用例:任何类型的序列化。
// datesconstringify = sjs({{ 日期:attr('string',(value)=> value.tolocalestring()),}); // regexpconst strignify = sjs({{ REGEXP:attr('string',(value)=> value.tostring()),});
用例:根据访问权限自定义有效载荷。
const stringify = sjs({{ publicProp:attr('string'), 限制性prop:attr('string',(value)=> isadmin?value:undefined),});
用例:价值格式
const stringify = sjs({{ prop:attr('string',(value)=> value.touppercase()),});
参数 | 类型 | 必需的 | 默认 | 规格 |
---|---|---|---|---|
模式 | 目的 | 是的 | 不明确的 | 定义弦乐行为的模式。 |
参数 | 类型 | 必需的 | 默认 | 规格 |
---|---|---|---|---|
类型 | 细绳 | 是的 | 不明确的 | 属性类型。 |
序列化器 | 功能 | 不 | 身份 | 用于序列化 /验证属性的功能。 |
参数 | 类型 | 必需的 | 默认 | 规格 |
---|---|---|---|---|
正则 | 正则表达式 | 不 | 默认的正则是 | 正则是逃脱文字的 |
麻省理工学院。