Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 32015|Vastaus: 3

[HTML/HTML5] Käytä FileReader.readAsArrayBuffer() -tiedostoa suurten tiedostojen käsittelyyn selaimessa

[Kopioi linkki]
Julkaistu 2.6.2019 20.35.17 | | | |
HTML5:n FileReader-rajapinta mahdollistaa asiakasselaimen lukea käyttäjän paikallisia tiedostoja, jolloin ladattua tiedostoa ei enää lue palvelin, mikä vähentää merkittävästi palvelimen kuormitusta ja säästää tiedoston lataamiseen kuluvaa aikaa. Käytännössä huomasin, että pystyn helposti käsittelemään 300k lokitiedostoa FileReader.readAsText(), mutta kun lokitiedosto on niin suuri kuin 1G tai jopa 2G, selain kaatuu. Tämä johtuu siitä, että readAsText() lataa kohdetiedoston muistiin kerralla, jolloin muisti ylittää rajan. Jos web-sovellus usein tarvitsee käsitellä suuria tiedostoja, meidän tulisi käyttää FileReader.readAsArrayBuffer() -ohjelmaa tiedostojen lukemiseen pala palalta.

Testitilanne

Meidän skenaario on yksinkertainen: JavaScriptillä saadaan IIS-lokin aikaväli

Esimerkki IIS:n lokitiedostoista:

#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
Tavoitteemme on saada aikakehys kyseiselle lokipäiväkirjalle:

Aloitusaika: 2016-08-18 06:53:55
Loppuaika: 2016-08-18 08:46:44

Käytä readAsText()-toteutusta

readAsText():n käyttö on suhteellisen yksinkertaista: saatuaan koko tiedoston merkkijonon, saat ensimmäiset 19 merkkiä jokaiselta riviltä alusta, määrität täyttyykö päivämäärämuoto, jos se täyttyy, nämä 19 merkkiä ovat aloitusaika, ja sama käy jokaisen rivin läpi hännästä saadakseen loppuajan, koodi on seuraava:


Otoksen IIS-lokikirjan juoksevat tulokset (koko: 1k) ovat odotetut.



Mutta kun kerran valitsemmeSuurempi IIS-loki (koko: 2G) ja selain kaatuu。 Syynä on se, että readAsText() lataa ensin koko tiedoston muistiin, joten jos tiedosto on liian suuri, muistia ei ole tarpeeksi ja selainprosessi kaatuu.


Käytä readAsArrayBuffer()-toteutusta

Koska JavaScriptin File-objekti perii Blobilta, voimme käyttää Blob.slice()-menetelmää pilkkomaan tiedoston pieniksi paloiksi, yleinen idea on:

Ensiksi ota tiedoston ensimmäiset 10 000 sisältöä ja muunna se tekstiksi
Ota jokaisen rivin ensimmäiset 19 merkkiä alusta selvittääksesi, täyttyykö päivämäärämuoto, ja jos on, nämä 19 merkkiä ovat aloitusaika
Sitten ota tiedoston lopussa oleva 10 000 sisältö ja muunnetaan se tekstiksi
Samoin kulje jokainen viiva hännän sisällöstä saadaksesi loppuajan

Koodi on seuraava:


readAsArrayBuffer() avulla saimme haluamamme tulokset hyvin lyhyessä ajassa, vaikka meillä oli yli 2G IIS -lokitietoja.






Edellinen:php kutsuu SMS-vahvistuskoodirajapintaa
Seuraava:vienti nimetty vienti ja oletusvienti
 Vuokraisäntä| Julkaistu 2.6.2019 20.39.24 |
Julkaistu 17.9.2021 9.11.00 |
Ripeä:Tekijät bannataan tai poistetaan, sisältö estetään automaattisesti
Julkaistu 21.12.2021 18.26.43 |
Opi ja opi vuokranantajan menetelmistä
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com