我让 JSON.stringify() 函数的速度提高了 10 倍,并且类型安全

2025-05-26

我让 JSON.stringify() 函数的速度提高了 10 倍,并且类型安全



// FASTER STRINGIFY FUNCTIONS
export function stringify<T>(input: T): string; // unsafe but fatest
export function assertStringify<T>(input: T): string; // throws TypeGuardError
export function isStringify<T>(input: T): string | null; // wrong type be null

// RUNTIME VALIDATORS ALLOWING SUPERFLUOUS PROPERTIES
export function is<T>(input: unknown): input is T; // returns boolean
export function assertType<T>(input: unknown): T; // throws TypeGuardError
export function validate<T>(input: unknown): IValidation; // detailed reasons

// DO NOT ALLOW SUPERFLUOUS PROPERTIES
export function equals<T>(input: unknown): input is T;
export function assertType<T>(input: unknown): T;
export function validate<T>(input: unknown): IValidation;


Enter fullscreen mode Exit fullscreen mode

大家好,我是typescript-json的开发者,它只需一行代码就能验证实例类型,之前我在dev.to上介绍过它“运行速度快 1000 倍的验证器库” 。今天,我又带着强大的 JSON 字符串转换函数回来了。

从上面的代码可以看出,当值与目标类型不同时,新的 JSON 字符串转换函数会抛出TypedGuardError或返回null值。令人惊奇的是,尽管进行了类型验证,这些 JSON 字符串转换函数仍然比原生函数快得多。inputTJSON.stringify()

JSON字符串转换速度

当然,由于这个基准是由我本人测量的,有人可能会怀疑它的客观性。

因此,为了确保客观性,我公开了基准测试中使用的所有代码。基准测试中使用的代码如下。您也可以在克隆typescript-json仓库后,通过运行npm installnpm run benchmark命令来运行基准测试程序。

如何使用

如果您想使用这些类型安全的 JSON 函数,只需安装并导入typescript-json即可。之后,像下面这样调用这些函数即可。您无需定义任何额外的专用函数,例如需要 JSON 模式定义的fast-json-stringify。您只需要一行纯 TypeScript 类型的代码即可。

需要注意的是,当参数值与目标类型不同时,函数TSON.assertStringify()会抛出TypeGuardError异常,并TSON.isStringify()返回值。当然,如果值与类型匹配,则只会返回 JSON 字符串。总之,请根据您的目的选择其中一种。booleaninputTinputT



import TSON from "typescript-json";

interface IMember {
name: string;
age: number;
}

// NO PROBLEM
const exact: IMember = { name: "someone", age: 0 };
TSON.assertStringify(exact);
TSON.isStringify(exact);

// WRONG TYPE
const wrong: IMember = { name: "someone", age: false as any };
TSON.assertStringify(wrong); // throws TypeGuardError
TSON.isStringify(wrong); // returns null

Enter fullscreen mode Exit fullscreen mode




怎么会这么快

AOT(提前)编译。

typescript-json会在编译级别分析你的代码(类型T),并生成用于 JSON 字符串转换的优化运行时代码。这种通过分析源代码来优化运行时代码生成的方式被称为 AOT(Ahead of Time,提前编译)。正因如此,尽管存在类型验证过程, typescript-json的 JSON 字符串转换函数仍然比原生函数快得多JSON.stringify()

同理,typescript-json的验证函数比其他验证库快很多。只有TypeBox可以与之匹敌,而且TypeBox采用的是 JIT(Just-in-time)编译。其他没有特殊技巧的库速度极慢,差距可能达到数千倍。

有人可能会问:“为什么要和其他验证器库比较?其他 JSON 字符串转换库在哪里?” 很遗憾,目前还没有其他库能像typescript-json一样安全地转换 JSON 字符串。因此,我不得不与其他验证器库进行比较。请理解我的情况。

is() 函数基准测试

assertType() 函数基准测试

TypeScript 类型的完整规范

typescript-json支持 TypeScript 类型的完整规范。

因此,使用TSON.assertStringify()TSON.isStringify()函数可以放心地增强程序的类型安全性。我希望这些函数对于使用 JSON 数据的网络系统能够真正发挥作用,尤其是在增强类型安全性方面。

成分 TSON TypeBox ajv io-ts zod C.V.
便于使用
对象(简单)
对象(分层)
对象(递归)
对象(联合,隐式)
对象(联合,显式)
对象(附加标签)
对象(模板文字类型)
对象(动态属性)
数组(分层)
数组(递归)
数组(递归、联合)
数组(R+U,隐式)
终极联合类型
  • 索尼:typescript-json
  • 简历:class-validator
文章来源:https://dev.to/samchon/i-made-10x-faster-jsonstringify-functions-even-type-safe-2eme
PREV
寻找编程副项目的想法
NEXT
我读了 21 篇关于如何成为高级开发人员的文章,所以你不必