See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 32015|Vastuse: 3

[HTML/HTML5] Kasuta FileReader.readAsArrayBuffer() suurte failide haldamiseks brauseris

[Kopeeri link]
Postitatud 02.06.2019 20:35:17 | | | |
HTML5 FileReaderi API võimaldab kliendibrauseril lugeda kasutaja kohalikke faile, nii et üleslaaditud faili server enam ei loe, mis vähendab oluliselt serveri koormust ja säästab faili üleslaadimiseks kuluvat aega. Praktikas olen aga leidnud, et suudan hõlpsasti hallata 300k logifaili FileReader.readAsText() abil, kuid kui logifail on nii suur kui 1G või isegi 2G, jookseb brauser kokku. See on tingitud sellest, et readAsText() laadib sihtfaili korraga mällu, põhjustades mälu piiri ületamise. Kui veebirakendus peab sageli suuri faile töötlema, peaksime kasutama FileReader.readAsArrayBuffer() failide lugemiseks tükkhaaval.

Teststsenaarium

Meie stsenaarium on lihtne: JavaScripti abil saame IIS-logi ajavahemiku

Näidis-IIS logid:

#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2016-08-18 06:53:55
#Fields: date time 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)+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
Meie eesmärk on saada selle logi ajaraam:

Algusaeg: 2016-08-18 06:53:55
Lõppaeg: 2016-08-18 08:46:44

Kasuta readAsText() rakendust

readAsText() kasutamine on suhteliselt lihtne: pärast kogu faili stringi saamist saad iga rea esimesed 19 tähemärki algusest, määra, kas kuupäeva formaat on täidetud, kui see on täidetud, siis need 19 märki on algusaeg ning sama kehtib iga saba rea kaudu, et saada lõppaeg, kood on järgmine:


Valimi IIS-i logi jooksutulemused (suurus: 1k) on sellised, nagu ootasime.



Aga kui me valimeSuurem IIS-logi (suurus: 2G) ja brauser jookseb kokku。 Põhjus on selles, et readAsText() laadib kõigepealt kogu faili mällu, nii et kui fail on liiga suur, jääb mälu liiga vähe ja brauseriprotsess jookseb kokku.


Kasuta readAsArrayBuffer() rakendust

Kuna JavaScriptis pärineb File objekt Blobilt, saame kasutada Blob.slice() meetodit, et lõigata fail väikesteks osadeks, üldine idee on:

Esiteks võta faili esimesed 10 000 sisu ja teisenda see tekstiks
Võta iga rea esimesed 19 märki algusest, et määrata, kas kuupäeva formaat on täidetud, ja kui jah, siis need 19 tähemärki on algusaeg
Seejärel võta faili lõpus olev 10 000 sisu ja teisenda see tekstiks
Samamoodi, läbige iga joont saba sisust, et saada lõppaeg

Kood on järgmine:


readAsArrayBuffer() abil saime soovitud tulemused väga lühikese ajaga, isegi kui kasutasime rohkem kui 2G IIS logisid.






Eelmine:php kutsub SMS-i verifitseerimiskoodi liidest
Järgmine:eksport nimega eksport ja vaikimisi eksport
 Üürileandja| Postitatud 02.06.2019 20:39:24 |
Postitatud 17.09.2021 09:11:00 |
Kiire:Autorid keelatakse või eemaldatakse sisu automaatselt blokeeritakse
Postitatud 21.12.2021 18:26:43 |
Õpi ja õpi üürileandja meetoditest
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com