Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 32015|Atsakyti: 3

[HTML/HTML5] Naudokite FileReader.readAsArrayBuffer() dideliems failams naršyklėje tvarkyti

[Kopijuoti nuorodą]
Paskelbta 2019-06-02 20:35:17 | | | |
HTML5 FileReader API leidžia kliento naršyklei nuskaityti vartotojo vietinius failus, kad serveris nebeskaitytų įkelto failo, o tai labai sumažina serverio naštą ir taupo laiką, reikalingą failui įkelti. Tačiau praktiškai pastebėjau, kad galiu lengvai tvarkyti 300k žurnalo failą su FileReader.readAsText(), bet kai žurnalo failas yra toks didelis kaip 1G ar net 2G, naršyklė sugenda. Taip yra todėl, kad readAsText() įkels tikslinį failą į atmintį iš karto, todėl atmintis viršys ribą. Taigi, jei žiniatinklio programai dažnai reikia apdoroti didelius failus, turėtume naudoti FileReader.readAsArrayBuffer(), kad perskaitytume failus po gabalėlį.

Bandymo scenarijus

Mūsų scenarijus yra paprastas, t. y. naudoti JavaScript, kad gautumėte IIS žurnalo laiko intervalą

IIS žurnalų pavyzdžiai:

#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2016-08-18 06:53:55
#Fields: data laikas s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2016-08-18 06:53:55 ::1 GET / - 80 - ::1 Mozilla/5.0+(Windows+NT+10.0; +WOW64; +Trident / 7.0; +rv:11.0)+patinka+gekonas - 200 0 0 476
2016-08-18 06:53:55 ::1 GET /iisstart.png - 80 - ::1 Mozilla/5.0+(Windows+NT+10.0; +WOW64; +Trident / 7.0; +rv:11.0)+patinka+Gecko http://localhost/ 200 0 0 3
2016-08-18 08:45:34 10.172.19.198 GET /test/pac/wpad.dat - 80 - 10.157.21.235 Mozilla/5.0+(Windows+NT+6.1; +Win64; +x64; +Trident / 7.0; +rv:11.0)+patinka+gekonas - 404 3 50 265
2016-08-18 08:46:44 10.172.19.198 GET /test/pac/wpad.dat - 80 - 10.157.21.235 Mozilla/5.0+(Windows+NT+6.1; +Win64; +x64; +Trident / 7.0; +rv:11.0)+patinka+gekonas - 200 0 0 6
Mūsų tikslas yra gauti šio žurnalo laikotarpį:

Pradžia: 2016-08-18 06:53:55
Pabaigos laikas: 2016-08-18 08:46:44

Naudoti readAsText() diegimą

Naudoti readAsText() yra gana paprasta, gavę viso failo eilutę, gaukite pirmuosius 19 kiekvienos eilutės simbolių nuo pradžios, nustatykite, ar laikomasi datos formato, jei jis patenkintas, tada šie 19 simbolių yra pradžios laikas, ir tas pats eina per kiekvieną eilutę nuo uodegos, kad gautumėte pabaigos laiką, kodas yra toks:


IIS žurnalo pavyzdžio (dydis: 1k) vykdomieji rezultatai yra tokie, kokių tikėjomės.



Bet kai mes pasirenkameDidesnis IIS žurnalas (dydis: 2G) ir naršyklė sugenda。 Priežastis ta, kad readAsText() pirmiausia įkels visą failą į atmintį, taigi, jei failas yra per didelis, neužteks atminties ir naršyklės procesas sugenda.


Naudoti readAsArrayBuffer() diegimą

Kadangi "JavaScript" failo objektas paveldi iš "Blob", galime naudoti "Blob.slice()" metodą, kad supjaustytume failą į mažus gabalėlius, bendra idėja yra tokia:

Pirmiausia paimkite pirmuosius 10 tūkstančių failo turinį ir konvertuokite jį į tekstą
Paimkite pirmuosius 19 kiekvienos eilutės simbolių nuo pradžios, kad nustatytumėte, ar laikomasi datos formato, o jei taip, šie 19 simbolių yra pradžios laikas
Tada paimkite 10k turinį failo pabaigoje ir konvertuokite jį į tekstą
Panašiai pereikite kiekvieną liniją nuo uodegos turinio, kad gautumėte pabaigos laiką

Kodas yra toks:


Naudodami readAsArrayBuffer(), mes galėjome gauti norimus rezultatus per labai trumpą laiką, net ir su daugiau nei 2G IIS žurnalais.






Ankstesnis:php skambina SMS patvirtinimo kodas sąsaja
Kitą:Eksportuoti pavadinimu ir numatytąjį eksportavimą
 Savininkas| Paskelbta 2019-06-02 20:39:24 |
Paskelbta 2021-09-17 09:11:00 |
Raginimas:Autoriai uždrausti arba pašalintas turinys automatiškai blokuojamas
Paskelbta 2021-12-21 18:26:43 |
Mokykitės ir mokykitės iš nuomotojo metodų
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com