
Kaip peržiūrėti didžiulį JSON failą, kad neužstrigtų naršyklė
Paskelbta 2026-07-23
Įklijavus 50MB API išklotinę ar visą duomenų bazės eksportą į bet kokį naršyklėje veikiantį JSON įrankį — įskaitant šį — kortelė sulėtės arba visiškai užšals. Tai nėra konkretaus įrankio klaida, tai naršyklių teksto ir DOM atvaizdavimo savybė. Štai kas iš tikrųjų vyksta ir kaip tai apeiti.
Kodėl dideli JSON failai užšaldo naršyklę, ne tik „lėtai kraunasi“
Susikaupia dvi atskiros kainos:
- Analizavimo kaina.
JSON.parsegerai suformuotai 50MB eilutei užtrunka maždaug pusę sekundės iki kelių sekundžių įprastame nešiojamame kompiuteryje — pastebima, bet ne tikroji problema. - Atvaizdavimo kaina. Ši iš tikrųjų užšaldo kortelę. Jei įrankis atvaizduoja suformatuotą rezultatą kaip milžinišką teksto bloką (arba dar blogiau, sutraukiamą medį su DOM mazgu kiekvienam raktui), naršyklė turi išdėstyti ir nupiešti potencialiai milijonus DOM mazgų. Būtent tai padaro kortelę nereaguojančią, ne analizavimas.
Taigi dydžio riba, į kurią atsitrenkiate, beveik niekada nekyla iš JSON specifikacijos ar analizatoriaus — ji kyla iš prašymo naršyklei vienu metu nupiešti milžinišką kiekį teksto ar įdėtos vartotojo sąsajos.
Tikras darbo eigos būdas iš tikrųjų dideliems failams
Neatidarykite viso failo jokioje naršyklės vietoje. Vietoj to:
- Pirmiausia išgaukite tik tą dalį, kurios reikia. Jei derinate vieną sugedusį įrašą 200MB išklotinėje, nereikia turėti prieš akis likusių 199MB. Komandinės eilutės įrankiai tai tvarko niekada neįkeldami viso failo į atmintį taip, kaip tai daro naršyklės kortelė:
# pull out one top-level key from a huge file, streaming jq '.results[42]' huge-file.json > fragment.json # or just grep for context around a known string first grep -n '"user_id": 88214' huge-file.json - Formatuokite tik tą fragmentą naršyklėje. Kelių KB dydžio išgautas JSON suformatuojamas akimirksniu ir tikrai skaitomas — tai tas pats „formatuoti tik tą fragmentą, kuris rūpi“ įprotis, vertas ugdyti bet kokiam dideliam žurnalui ar išklotinei, ne tik šiai konkrečiai klaidai.
- Jei reikia tikrinti struktūrą, ne reikšmes, pirmiausia lokaliai paleiskite
jq 'keys'arbajq '. | length', kad suprastumėte formą prieš nuspręsdami, ką išgauti. Nereikia matyti 50 000 masyvo įrašų, kad žinotumėte, jog masyve yra 50 000 įrašų.
Kada naršyklės įrankis iš tikrųjų tinka
Didžiajai daliai realaus derinimo — API atsakymo, konfigūracijos failo, webhook naudingosios apkrovos — turite reikalą su kilobaitais iki kelių megabaitų, ne šimtais. Tokiame diapazone tiesioginis įklijavimas į formatuotoją ir akimirksniu skaitomas rezultatas su tiksliomis klaidų vietomis yra greičiau, nei apskritai griebtis komandinės eilutės. Riba, kur tai sugenda, yra kur kas aukštesnė, nei dauguma mano; būtent „dešimtys megabaitų ir daugiau“ sukelia realias problemas, ne „daugiau nei puslapis“.
Greita nuoroda
| Failo dydis | Ką daryti |
|---|---|
| Iki ~5MB | Įklijuokite tiesiai į naršyklės formatuotoją — akimirksniu, viskas gerai |
| ~5–30MB | Vis dar tinkama, bet tikėkitės trumpos pauzės; formatuokite tik tai, ką reikia perskaityti |
| 30MB+ | Pirmiausia išgaukite reikiamą fragmentą su jq/grep, formatuokite tik jį |
Įrankiui nereikia „didelio failo režimo“, kad tai išspręstų — sprendimas yra išgauti prieš peržiūrint, o tai darbo eigos pakeitimas, ne įrankio apribojimas.