Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 32015|Odgovoriti: 3

[HTML/HTML5] Uporabite FileReader.readAsArrayBuffer() za obdelavo velikih datotek v brskalniku

[Kopiraj povezavo]
Objavljeno na 2. 06. 2019 20:35:17 | | | |
HTML5-jev FileReader API omogoča brskalniku odjemalca branje lokalnih datotek uporabnika, tako da naložene datoteke strežnik ne bere več, kar močno zmanjša obremenitev strežnika in prihrani čas, potreben za nalaganje datoteke. V praksi pa sem ugotovil, da lahko z FileReader.readAsText() enostavno obdelam 300k dnevnik datoteko, vendar ko je dnevnik tako velik kot 1G ali celo 2G, brskalnik zruši. To je zato, ker readAsText() naloži ciljno datoteko v pomnilnik naenkrat, kar povzroči, da pomnilnik preseže omejitev. Če spletna aplikacija pogosto potrebuje obdelavo velikih datotek, bi morali uporabiti FileReader.readAsArrayBuffer() za branje datotek kos za kosom.

Testni scenarij

Naš scenarij je preprost, in sicer, da uporabimo JavaScript za pridobitev časovnega obdobja IIS dnevnika

Primeri IIS dnevnikov:

#Software: Microsoft Internet Information Services 10.0
#Version: 1,0
#Date: 2016-08-18 06:53:55
#Fields: datum čas s-ip cs-metoda cs-uri-stem cs-uri-poizvedba s-port cs-uporabniško ime c-ip cs(User-agent) cs(Referer) sc-status sc-podstatus sc-win32-status časovno vzeto
2016-08-18 06:53:55 ::1 GET / - 80 - ::1 Mozilla/5.0+(Windows+NT+10.0; +WOW64; +Trident/7,0; +rv:11.0)+like+Gecko - 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)+like+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)+like+Gecko - 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)+like+Gecko - 200 0 0 6
Naš cilj je dobiti časovni okvir tega dnevnika:

Začetek: 2016-08-18 06:53:55
Končni čas: 2016-08-18 08:46:44

Uporabite implementacijo readAsText()

Uporaba readAsText() je razmeroma preprosta: po pridobitvi niza celotne datoteke dobimo prvih 19 znakov vsake vrstice na začetku, določimo, ali je datum formata izpolnjen, če je izpolnjen, teh 19 znakov predstavlja začetni čas, enako pa poteka skozi vsako vrstico od konca za končni čas, koda je naslednja:


Rezultati vzorčnega IIS dnevnika (velikost: 1k) so taki, kot smo pričakovali.



A ko enkrat izberemoVečji IIS dnevnik (velikost: 2G) in brskalnik se sesuje。 Razlog je v tem, da readAsText() najprej naloži celotno datoteko v pomnilnik, tako da če je datoteka prevelika, ne bo dovolj pomnilnika in proces brskalnika se bo sesul.


Uporabite implementacijo readAsArrayBuffer()

Ker objekt File v JavaScriptu podeduje od Blob, lahko uporabimo metodo Blob.slice() za rezanje datoteke na majhne dele, je splošna ideja:

Najprej vzemi prvih 10.000 vsebin datoteke in jo pretvori v besedilo
Vzemite prvih 19 znakov vsake vrstice od začetka, da ugotovite, ali je datumska oblika izpolnjena, in če je, teh 19 znakov predstavlja začetni čas
Nato vzamem 10k vsebine na koncu datoteke in jo pretvorim v besedilo
Podobno prečkajte vsako vrstico od vsebine repa, da dobite končni čas

Koda je naslednja:


Z uporabo readAsArrayBuffer() smo v zelo kratkem času dosegli želene rezultate, tudi z več kot 2G IIS logi.






Prejšnji:php imenuje vmesnik SMS verifikacijske kode
Naslednji:izvoz z imenom izvoz in privzeti izvoz
 Najemodajalec| Objavljeno na 2. 06. 2019 20:39:24 |
Objavljeno na 17. 09. 2021 09:11:00 |
Uren:Avtorji so prepovedani ali pa je vsebina samodejno blokirana
Objavljeno na 21. 12. 2021 18:26:43 |
Učite se in učite se od najemodajalčevih metod
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com