Ir ao contido

Rendemento

A velocidade e o tamaño desta biblioteca en comparación coa súa versión principal anterior e coas demais bibliotecas de npm que validan identificadores españois. Todas as cifras desta páxina lense de bench/results/latest.json ao xerar o sitio: non se escribe nada a man. Se unha biblioteca é máis rápida ou máis pequena nalgunha cousa, as táboas móstrano.

Onde e como se executou o benchmark
MáquinaAMD EPYC 9V74 80-Core Processor
Núcleos4
Memoria16 GiB
Sistema operativolinux 6.17.0-1022-azure (x64)
Node.jsv24.21.0
Data2 de outubro de 2026
Commit medido1166241
Método3 roldas; cada tarefa, 2.000 ms tras 500 ms de quecemento, no seu propio proceso; a cifra é a da rolda mediana

As cifras absolutas dependen da máquina. As proporcións entre as bibliotecas dunha mesma execución mantéñense moito mellor dunha máquina a outra, así que compare esas.

Millóns de validacións por segundo (M ops/s; canto maior sexa a cifra, máis rápida é), con cada biblioteca chamada como indica a súa documentación, coas súas opcións predeterminadas, sobre os mesmos documentos válidos e non válidos en forma canónica. «Rendemento relativo» indica a proporción entre o rendemento desta compilación e o de cada biblioteca, na mesma execución. non compatible significa que a biblioteca non ten validador para ese tipo.

DNI: millóns de validacións por segundo (M ops/s; canto maior sexa a cifra, máis rápida é) con 225 documentos válidos e non válidos en forma canónica, e a proporción entre o rendemento desta compilación e o de cada biblioteca
BibliotecaM ops/sRendemento relativo
nif-dni-nie-cif-validation esta compilación60,12—
@maistik/validate-nif 2.0.19,466,4× o rendemento
dni-js 1.0.08,906,8× o rendemento
nif-dni-nie-cif-validation 1.0.118,597,0× o rendemento
better-dni 4.4.28,447,1× o rendemento
spain-id 1.1.146,968,6× o rendemento
validator.js isIdentityCard(x, "ES") 13.15.355,7310,5× o rendemento
validator.js isTaxID(x, "es-ES") 13.15.354,2214,3× o rendemento
@kreyo/nif-validator 0.1.02,7821,6× o rendemento
jsvat 2.5.42,1028,6× o rendemento
stdnum 1.12.60,41146,3× o rendemento

Ningunha outra biblioteca foi máis rápida co conxunto DNI.

NIE: millóns de validacións por segundo (M ops/s; canto maior sexa a cifra, máis rápida é) con 150 documentos válidos e non válidos en forma canónica, e a proporción entre o rendemento desta compilación e o de cada biblioteca
BibliotecaM ops/sRendemento relativo
nif-dni-nie-cif-validation esta compilación57,60—
@maistik/validate-nif 2.0.18,396,9× o rendemento
better-dni 4.4.28,177,1× o rendemento
nif-dni-nie-cif-validation 1.0.116,449,0× o rendemento
dni-js 1.0.04,4912,8× o rendemento
spain-id 1.1.144,0114,4× o rendemento
validator.js isTaxID(x, "es-ES") 13.15.353,4216,8× o rendemento
validator.js isIdentityCard(x, "ES") 13.15.353,1418,4× o rendemento
@kreyo/nif-validator 0.1.02,6521,7× o rendemento
jsvat 2.5.41,5936,2× o rendemento
stdnum 1.12.60,39146,0× o rendemento

Ningunha outra biblioteca foi máis rápida co conxunto NIE.

CIF: millóns de validacións por segundo (M ops/s; canto maior sexa a cifra, máis rápida é) con 270 documentos válidos e non válidos en forma canónica, e a proporción entre o rendemento desta compilación e o de cada biblioteca
BibliotecaM ops/sRendemento relativo
nif-dni-nie-cif-validation esta compilación55,06—
@maistik/validate-nif 2.0.17,747,1× o rendemento
nif-dni-nie-cif-validation 1.0.117,277,6× o rendemento
spain-id 1.1.144,5012,2× o rendemento
@kreyo/nif-validator 0.1.02,5022,0× o rendemento
jsvat 2.5.42,3723,2× o rendemento
stdnum 1.12.60,38146,7× o rendemento
better-dni 4.4.2non compatiblenon compatible
dni-js 1.0.0non compatiblenon compatible
validator.js isIdentityCard(x, "ES") 13.15.35non compatiblenon compatible
validator.js isTaxID(x, "es-ES") 13.15.35non compatiblenon compatible

Ningunha outra biblioteca foi máis rápida co conxunto CIF.

A velocidade non o é todo, e estas cifras deixan cousas fóra: a memoria, a primeira chamada antes de que o JIT quente, a entrada que necesita normalización e o custo do resultado detallado de validate(). Unha biblioteca que rexeita axiña unha cadea é rápida con ela, e por iso a concordancia con SPEC.md mídese á parte, máis abaixo.

O que engade un validador a un bundle, minificado e comprimido con gzip (min+gzip; canto menor sexa a cifra, máis pequeno é), empaquetado con esbuild como fai a comprobación de tamaño da propia biblioteca. A barra dunha biblioteca moito máis grande ca as demais debúxase completa, co final cortado.

Tamaño dun validador de calquera tipo (min+gzip; canto menor sexa a cifra, máis pequeno é)
BibliotecaCalquera tipo
@maistik/validate-nif 2.0.1456 B
@kreyo/nif-validator 0.1.0533 B
spain-id 1.1.14583 B
dni-js 1.0.0882 B
nif-dni-nie-cif-validation esta compilación929 B
better-dni 4.4.21.134 B
jsvat 2.5.41.186 B
nif-dni-nie-cif-validation 1.0.111.517 B
validator.js isIdentityCard(x, "ES") 13.15.352.539 B
validator.js isTaxID(x, "es-ES") 13.15.356.537 B
stdnum 1.12.651.063 B

Máis pequenas ca esta compilación para un validador de calquera tipo: @maistik/validate-nif 2.0.1 (456 B), @kreyo/nif-validator 0.1.0 (533 B), spain-id 1.1.14 (583 B) e dni-js 1.0.0 (882 B). Tamén se mediu stdnum 1.12.6 cunha importación directa do seu módulo do NIF español (non documentada): 2.468 B.

Algunhas bibliotecas máis pequenas validan menos tipos. Esta dedica bytes a normalizar a entrada, aos tipos de control de CIF-3 e aos NIF K/L/M. As bibliotecas publicadas só como CommonJS non admiten tree shaking, así que unha das súas funcións custa a biblioteca enteira. As bibliotecas de moitos países ou de propósito xeral, como stdnum e validator.js, son máis grandes por deseño.

Tamaño dun validador de cada tipo e da biblioteca completa (min+gzip; canto menor sexa a cifra, máis pequeno é)
BibliotecaDNINIECIFCalquera tipoBiblioteca completa
@maistik/validate-nif 2.0.1215 B243 B319 B456 B1.189 B
@kreyo/nif-validator 0.1.0533 B533 B533 B533 B746 B
spain-id 1.1.14165 B237 B363 B583 B704 B
dni-js 1.0.0883 B882 Bnon compatible882 B880 B
nif-dni-nie-cif-validation esta compilación623 B586 B568 B929 B4.679 B
better-dni 4.4.21.135 B1.135 Bnon compatible1.134 B1.132 B
jsvat 2.5.41.186 B1.186 B1.186 B1.186 B5.266 B
nif-dni-nie-cif-validation 1.0.111.517 B1.517 B1.518 B1.517 B1.514 B
validator.js isIdentityCard(x, "ES") 13.15.352.539 B2.539 Bnon compatible2.539 B44.449 B
validator.js isTaxID(x, "es-ES") 13.15.356.537 B6.537 Bnon compatible6.537 B44.449 B
stdnum 1.12.651.063 B51.063 B51.063 B51.063 B51.054 B

A porcentaxe dos casos de proba da biblioteca (opcións predeterminadas) que cada biblioteca xulga igual ca SPEC.md: válidos ou non válidos.

Concordancia con SPEC.md (non corrección absoluta): a porcentaxe de casos que cada biblioteca xulga igual ca SPEC.md, en todos eles e só na entrada canónica
BibliotecaTodos os casosSó entrada canónica
nif-dni-nie-cif-validation esta compilación100,0 %100,0 %
nif-dni-nie-cif-validation 1.0.1184,0 %92,2 %
spain-id 1.1.1482,4 %85,4 %
better-dni 4.4.271,9 %86,7 %
dni-js 1.0.073,4 %86,7 %
stdnum 1.12.676,8 %77,7 %
validator.js isIdentityCard(x, "ES") 13.15.3575,0 %86,7 %
validator.js isTaxID(x, "es-ES") 13.15.3584,4 %100,0 %
@maistik/validate-nif 2.0.182,4 %86,4 %
@kreyo/nif-validator 0.1.082,4 %86,4 %
jsvat 2.5.486,4 %89,3 %
Concordancia con SPEC.md por tipo de documento, e as discrepancias debidas a decisións que SPEC.md documenta
BibliotecaDNINIECIFK/L/MDiscrepanciasPor unha decisión documentada
nif-dni-nie-cif-validation esta compilación100,0 %100,0 %100,0 %100,0 %00
nif-dni-nie-cif-validation 1.0.1173,3 %88,9 %83,6 %100,0 %2013
spain-id 1.1.1490,0 %77,8 %86,9 %36,4 %2213
better-dni 4.4.273,3 %77,8 %non compatible45,5 %187
dni-js 1.0.076,7 %77,8 %non compatible45,5 %177
stdnum 1.12.690,0 %83,3 %63,9 %100,0 %2929
validator.js isIdentityCard(x, "ES") 13.15.3580,0 %77,8 %non compatible45,5 %166
validator.js isTaxID(x, "es-ES") 13.15.3580,0 %77,8 %non compatible100,0 %105
@maistik/validate-nif 2.0.186,7 %77,8 %86,9 %45,5 %2214
@kreyo/nif-validator 0.1.086,7 %77,8 %86,9 %45,5 %2214
jsvat 2.5.490,0 %83,3 %82,0 %100,0 %1717

Un tipo que unha biblioteca non valida exclúese das súas cifras, así que compare as columnas, e non «Todos os casos», entre bibliotecas de distinto alcance. A lista de discrepancias de cada biblioteca, cun exemplo de cada unha, está en latest.md (en inglés).

  • Entradas. Xéranse cun xerador pseudoaleatorio con semente, así que todas as execucións e todas as máquinas miden as mesmas cadeas: documentos válidos e os mesmos documentos cun carácter de control incorrecto, para cada tipo.
  • Chamadas. Cada biblioteca chámase exactamente como indica a súa documentación, coas súas opcións predeterminadas, sobre a cadea de entrada sen procesar. A única excepción é jsvat, un validador de NIF-IVE, a cuxas entradas se lles engade o prefixo ES fóra do bucle cronometrado.
  • Medición. tinybench executa cada tarefa no seu propio proceso, tras un quecemento, para que o que V8 aprende dunha biblioteca non cambie a cifra da seguinte. A execución completa repítese en varias roldas, a orde das bibliotecas vai rotando entre conxuntos e roldas, e cada cifra é a da súa rolda mediana.
  • Tamaño. A importación dunha soa función que documenta cada biblioteca, empaquetada e minificada con esbuild e comprimida con gzip no nivel 9, menos o custo dunha importación baleira.
  • Concordancia. A chamada «calquera tipo» de cada biblioteca sobre os casos que proban as opcións predeterminadas, xulgando cada caso como válido ou non válido.

A metodoloxía completa, as súas advertencias e o esquema dos resultados están en bench/README.md (en inglés).

As bibliotecas instálanse en versións exactas, así que unha execución mide exactamente o que recolle latest.json. Peche antes os demais programas, e compare proporcións en lugar de cifras absolutas:

Fiestra do terminal
git clone https://github.com/josegoval/nif-dni-nie-cif-validation.git
cd nif-dni-nie-cif-validation
pnpm install --frozen-lockfile
pnpm bench:competitors # uns 5 minutos; escribe bench/results/latest.json e latest.md

pnpm bench, en cambio, compara cada validador coa versión 1. Un fluxo de traballo de GitHub Actions executa o mesmo benchmark baixo demanda, nun runner compartido, e sobe os resultados.