Joan edukira

Errendimendua

Zenbateraino den azkarra eta txikia liburutegi hau, bere aurreko bertsio nagusiaren eta Espainiako identifikatzaileak egiaztatzen dituzten npm-ko beste liburutegien ondoan. Orri honetako zenbaki guztiak bench/results/latest.json fitxategitik irakurtzen dira gunea sortzean: ez da ezer eskuz idazten. Liburutegi bat zerbaitetan azkarragoa edo txikiagoa bada, taulek erakutsi egiten dute.

Non eta nola exekutatu zen errendimendu-proba
MakinaAMD EPYC 9V74 80-Core Processor
Nukleoak4
Memoria16 GiB
Sistema eragilealinux 6.17.0-1022-azure (x64)
Node.jsv24.21.0
Data2026-10-02
Neurtutako commita1166241
Metodoa3 txanda; zeregin bakoitza 2.000 ms, 500 ms-ko berotzearen ondoren, bere prozesuan; zenbakia txanda medianarena da

Zenbaki absolutuak makinaren araberakoak dira. Exekuzio bereko liburutegien arteko proportzioak askoz hobeto mantentzen dira makina batetik bestera; beraz, konparatu horiek.

Segundoko egiaztapen kopurua, milioitan (M ops/s; zenbat eta gehiago, orduan eta azkarragoa), liburutegi bakoitzari bere dokumentazioak dioen bezala deituta, bere aukera lehenetsiekin, forma kanonikoko dokumentu baliozko eta baliogabe berberen gainean. «Errendimendu erlatiboa» zutabeak konpilazio honen errendimenduaren eta liburutegi bakoitzarenaren arteko proportzioa adierazten du, exekuzio berean. ez da onartzen adierazpenak esan nahi du liburutegiak ez duela mota horretarako egiaztatzailerik.

NAN: segundoko egiaztapen kopurua, milioitan (M ops/s; zenbat eta gehiago, orduan eta azkarragoa), forma kanonikoko 225 dokumentu baliozko eta baliogaberekin, eta konpilazio honen errendimenduaren eta liburutegi bakoitzarenaren arteko proportzioa
LiburutegiaM ops/sErrendimendu erlatiboa
nif-dni-nie-cif-validation konpilazio hau60,12—
@maistik/validate-nif 2.0.19,46errendimenduaren 6,4 halakoa
dni-js 1.0.08,90errendimenduaren 6,8 halakoa
nif-dni-nie-cif-validation 1.0.118,59errendimenduaren 7,0 halakoa
better-dni 4.4.28,44errendimenduaren 7,1 halakoa
spain-id 1.1.146,96errendimenduaren 8,6 halakoa
validator.js isIdentityCard(x, "ES") 13.15.355,73errendimenduaren 10,5 halakoa
validator.js isTaxID(x, "es-ES") 13.15.354,22errendimenduaren 14,3 halakoa
@kreyo/nif-validator 0.1.02,78errendimenduaren 21,6 halakoa
jsvat 2.5.42,10errendimenduaren 28,6 halakoa
stdnum 1.12.60,41errendimenduaren 146,3 halakoa

Beste liburutegi bat ere ez zen azkarragoa izan NAN multzoan.

AIZ: segundoko egiaztapen kopurua, milioitan (M ops/s; zenbat eta gehiago, orduan eta azkarragoa), forma kanonikoko 150 dokumentu baliozko eta baliogaberekin, eta konpilazio honen errendimenduaren eta liburutegi bakoitzarenaren arteko proportzioa
LiburutegiaM ops/sErrendimendu erlatiboa
nif-dni-nie-cif-validation konpilazio hau57,60—
@maistik/validate-nif 2.0.18,39errendimenduaren 6,9 halakoa
better-dni 4.4.28,17errendimenduaren 7,1 halakoa
nif-dni-nie-cif-validation 1.0.116,44errendimenduaren 9,0 halakoa
dni-js 1.0.04,49errendimenduaren 12,8 halakoa
spain-id 1.1.144,01errendimenduaren 14,4 halakoa
validator.js isTaxID(x, "es-ES") 13.15.353,42errendimenduaren 16,8 halakoa
validator.js isIdentityCard(x, "ES") 13.15.353,14errendimenduaren 18,4 halakoa
@kreyo/nif-validator 0.1.02,65errendimenduaren 21,7 halakoa
jsvat 2.5.41,59errendimenduaren 36,2 halakoa
stdnum 1.12.60,39errendimenduaren 146,0 halakoa

Beste liburutegi bat ere ez zen azkarragoa izan AIZ multzoan.

IFK: segundoko egiaztapen kopurua, milioitan (M ops/s; zenbat eta gehiago, orduan eta azkarragoa), forma kanonikoko 270 dokumentu baliozko eta baliogaberekin, eta konpilazio honen errendimenduaren eta liburutegi bakoitzarenaren arteko proportzioa
LiburutegiaM ops/sErrendimendu erlatiboa
nif-dni-nie-cif-validation konpilazio hau55,06—
@maistik/validate-nif 2.0.17,74errendimenduaren 7,1 halakoa
nif-dni-nie-cif-validation 1.0.117,27errendimenduaren 7,6 halakoa
spain-id 1.1.144,50errendimenduaren 12,2 halakoa
@kreyo/nif-validator 0.1.02,50errendimenduaren 22,0 halakoa
jsvat 2.5.42,37errendimenduaren 23,2 halakoa
stdnum 1.12.60,38errendimenduaren 146,7 halakoa
better-dni 4.4.2ez da onartzenez da onartzen
dni-js 1.0.0ez da onartzenez da onartzen
validator.js isIdentityCard(x, "ES") 13.15.35ez da onartzenez da onartzen
validator.js isTaxID(x, "es-ES") 13.15.35ez da onartzenez da onartzen

Beste liburutegi bat ere ez zen azkarragoa izan IFK multzoan.

Abiadura ez da dena, eta zenbaki hauek gauza batzuk uzten dituzte kanpoan: memoria, JITa berotu aurreko lehen deia, normalizazioa behar duen sarrera eta validate() funtzioaren emaitza xehatuaren kostua. Kate bat goiz baztertzen duen liburutegi bat azkarra da kate horrekin, eta horregatik neurtzen da SPEC.md fitxategiarekiko adostasuna bereiz, behean.

Egiaztatzaile batek bundle bati gehitzen diona, minifikatuta eta gzip bidez konprimatuta (min+gzip; zenbat eta gutxiago, orduan eta txikiagoa), esbuild bidez paketatuta, liburutegiaren beraren tamaina-egiaztapenak egiten duen bezala. Besteak baino askoz handiagoa den liburutegi baten barra osorik marrazten da, amaiera moztuta.

Edozein motatako egiaztatzaile baten tamaina (min+gzip; zenbat eta gutxiago, orduan eta txikiagoa)
LiburutegiaEdozein mota
@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 konpilazio hau929 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

Konpilazio hau baino txikiagoak edozein motatako egiaztatzaile baterako: @maistik/validate-nif 2.0.1 (456 B), @kreyo/nif-validator 0.1.0 (533 B), spain-id 1.1.14 (583 B) eta dni-js 1.0.0 (882 B). Hau ere neurtu da: stdnum 1.12.6, Espainiako IFZaren modulua zuzenean inportatuta (dokumentatu gabea), 2.468 B.

Liburutegi txikiago batzuek mota gutxiago egiaztatzen dituzte. Honek sarrera normalizatzeko, CIF-3 arauko kontrol motetarako eta K/L/M IFZetarako erabiltzen ditu byteak. CommonJS gisa bakarrik argitaratutako liburutegiek ez dute tree shaking onartzen; beraz, haien funtzio batek liburutegi osoa kostatzen du. Herrialde askotako edo helburu orokorreko liburutegiak, stdnum eta validator.js adibidez, handiagoak dira diseinuz.

Mota bakoitzeko egiaztatzaile baten eta liburutegi osoaren tamaina (min+gzip; zenbat eta gutxiago, orduan eta txikiagoa)
LiburutegiaNANAIZIFKEdozein motaLiburutegi osoa
@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 Bez da onartzen882 B880 B
nif-dni-nie-cif-validation konpilazio hau623 B586 B568 B929 B4.679 B
better-dni 4.4.21.135 B1.135 Bez da onartzen1.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 Bez da onartzen2.539 B44.449 B
validator.js isTaxID(x, "es-ES") 13.15.356.537 B6.537 Bez da onartzen6.537 B44.449 B
stdnum 1.12.651.063 B51.063 B51.063 B51.063 B51.054 B

SPEC.md fitxategiarekiko adostasuna

«SPEC.md fitxategiarekiko adostasuna» atala

Liburutegiaren proba-kasuetatik (aukera lehenetsiak) liburutegi bakoitzak SPEC.md fitxategiak bezala epaitzen dituen kasuen ehunekoa: baliozkoak edo baliogabeak.

SPEC.md fitxategiarekiko adostasuna (ez zuzentasun absolutua): liburutegi bakoitzak SPEC.md fitxategiak bezala epaitzen dituen kasuen ehunekoa, kasu guztietan eta sarrera kanonikoan bakarrik
LiburutegiaKasu guztiakSarrera kanonikoa bakarrik
nif-dni-nie-cif-validation konpilazio hau% 100,0% 100,0
nif-dni-nie-cif-validation 1.0.11% 84,0% 92,2
spain-id 1.1.14% 82,4% 85,4
better-dni 4.4.2% 71,9% 86,7
dni-js 1.0.0% 73,4% 86,7
stdnum 1.12.6% 76,8% 77,7
validator.js isIdentityCard(x, "ES") 13.15.35% 75,0% 86,7
validator.js isTaxID(x, "es-ES") 13.15.35% 84,4% 100,0
@maistik/validate-nif 2.0.1% 82,4% 86,4
@kreyo/nif-validator 0.1.0% 82,4% 86,4
jsvat 2.5.4% 86,4% 89,3
SPEC.md fitxategiarekiko adostasuna dokumentu motaren arabera, eta SPEC.md fitxategiak dokumentatzen dituen erabakiek eragindako desadostasunak
LiburutegiaNANAIZIFKK/L/MDesadostasunakErabaki dokumentatu baten ondorioz
nif-dni-nie-cif-validation konpilazio hau% 100,0% 100,0% 100,0% 100,000
nif-dni-nie-cif-validation 1.0.11% 73,3% 88,9% 83,6% 100,02013
spain-id 1.1.14% 90,0% 77,8% 86,9% 36,42213
better-dni 4.4.2% 73,3% 77,8ez da onartzen% 45,5187
dni-js 1.0.0% 76,7% 77,8ez da onartzen% 45,5177
stdnum 1.12.6% 90,0% 83,3% 63,9% 100,02929
validator.js isIdentityCard(x, "ES") 13.15.35% 80,0% 77,8ez da onartzen% 45,5166
validator.js isTaxID(x, "es-ES") 13.15.35% 80,0% 77,8ez da onartzen% 100,0105
@maistik/validate-nif 2.0.1% 86,7% 77,8% 86,9% 45,52214
@kreyo/nif-validator 0.1.0% 86,7% 77,8% 86,9% 45,52214
jsvat 2.5.4% 90,0% 83,3% 82,0% 100,01717

Liburutegi batek egiaztatzen ez duen mota bat haren zenbakietatik kanpo geratzen da; beraz, irismen desberdineko liburutegien artean, konparatu zutabeak, eta ez «Kasu guztiak». Liburutegi bakoitzaren desadostasunen zerrenda, bakoitzaren adibide batekin, latest.md fitxategian dago (ingelesez).

  • Sarrerak. Hazidun sorgailu sasi-ausazko batekin sortzen dira; beraz, exekuzio eta makina guztiek kate berberak neurtzen dituzte: dokumentu baliozkoak eta dokumentu berak kontrol-karaktere okerrarekin, mota bakoitzerako.
  • Deiak. Liburutegi bakoitzari bere dokumentazioak dioen bezala deitzen zaio, bere aukera lehenetsiekin, prozesatu gabeko sarrera-katearen gainean. Salbuespen bakarra jsvat da, IFZ-BEZ egiaztatzaile bat: haren sarrerei ES aurrizkia gehitzen zaie, neurtutako begiztatik kanpo.
  • Neurketa. tinybench tresnak zeregin bakoitza bere prozesuan exekutatzen du, berotze baten ondoren, V8k liburutegi batetik ikasten duenak hurrengoaren zenbakia alda ez dezan. Exekuzio osoa hainbat txandatan errepikatzen da, liburutegien ordena multzoen eta txanden artean aldatzen da, eta zenbaki bakoitza bere txanda medianarena da.
  • Tamaina. Liburutegi bakoitzak dokumentatzen duen funtzio bakarreko inportazioa, esbuild bidez paketatua eta minifikatua eta gzip bidez 9. mailan konprimatua, inportazio huts baten kostua kenduta.
  • Adostasuna. Liburutegi bakoitzaren «edozein mota» deia, aukera lehenetsiak probatzen dituzten kasuen gainean, kasu bakoitza baliozko edo baliogabe gisa epaituta.

Metodologia osoa, haren oharrak eta emaitzen eskema bench/README.md fitxategian daude (ingelesez).

Liburutegiak bertsio zehatzetan instalatzen dira; beraz, exekuzio batek latest.json fitxategiak jasotzen duena neurtzen du, hain zuzen. Itxi aurretik beste programak, eta konparatu proportzioak, ez zenbaki absolutuak:

Terminal-leihoa
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 # 5 minutu inguru; bench/results/latest.json eta latest.md idazten ditu

pnpm bench komandoak, berriz, egiaztatzaile bakoitza 1. bertsioarekin konparatzen du. GitHub Actions lan-fluxu batek errendimendu-proba bera exekutatzen du eskatuta, runner partekatu batean, eta emaitzak igotzen ditu.