Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 32015|Válasz: 3

[HTML/HTML5] A FileReader.readAsArrayBuffer() segítségével kezeld a nagy fájlokat a böngészőben

[Linket másol]
Közzétéve 2019. 06. 02. 20:35:17 | | | |
A HTML5 FileReader API-ja lehetővé teszi a kliens böngésző számára, hogy olvassa a felhasználó helyi fájljait, így a feltöltött fájlt már nem olvassa el a szerver, ami jelentősen csökkenti a szerver terhét és megtakarítja a fájl feltöltéséhez szükséges időt. A gyakorlatban azonban azt tapasztaltam, hogy könnyen kezelni tudok egy 300k naplófájlt a FileReader.readAsText() segítségével, de ha a naplófájl 1G vagy akár 2G méretű, a böngésző összeomlik. Ez azért van, mert a readAsText() egyszerre tölti be a célfájlt a memóriába, így a memória túllépi a határt. Tehát ha a webalkalmazásnak gyakran nagy fájlokat kell feldolgoznia, akkor a FileReader.readAsArrayBuffer() segítségével olvassuk el a fájlokat darabonként.

Teszt forgatókönyv

A mi helyzetünk egyszerű: JavaScript segítségével megkapjuk az IIS napló időtartományát

Példa IIS naplók:

#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
Célunk, hogy megtudjuk ennek a naplónak az időkeretét:

Kezdési idő: 2016-08-18 06:53:55
Végidő: 2016-08-18 08:46:44

readAsText() implementáció használata

A readAsText() használata viszonylag egyszerű: miután megkaptuk a teljes fájl stringjét, megkapjuk minden sorból az első 19 karaktert az elejétől, határozd meg, hogy a dátumformátum teljes-e, ha teljesül, akkor ez a 19 karakter a kezdeti idő, és ugyanez megy végig minden soron a végidőhöz, a kód a következő:


A mintavételi IIS napló (méret: 1k) futó eredményei a vártoknak megfelelően teljesítenek.



De ha egyszer választjukEgy nagyobb IIS napló (méret: 2G) és a böngésző összeomlik。 Ennek oka, hogy a readAsText() először az egész fájlt tölti be a memóriába, így ha a fájl túl nagy, akkor nem lesz elég memória, és a böngészőfolyamat összeomlik.


Használd readAsArrayBuffer() implementációt

Mivel a JavaScript File objektuma a Blobból örököl, a Blob.slice() módszerrel apró darabokra vághatjuk a fájlt, az általános ötlet a következő:

Először vegyük a fájl első 10 ezer tartalmát, és konvertáld szöveggé
Vegyük az elején minden sorból az első 19 karaktert, hogy megállapítsuk, teljesül-e a dátumformátum, és ha igen, akkor ez a 19 karakter a kezdő időpont
Ezután a fájl végén lévő 10k tartalmat szöveggé alakítsd át
Hasonlóképpen, végighaladjunk a faroktartalom minden vonalán, hogy megkapd a végidőt

A kódex a következő:


A readAsArrayBuffer() segítségével nagyon rövid idő alatt elértük a kívánt eredményeket, még több mint 2G IIS naplókkal is.






Előző:a php az SMS ellenőrző kód interfészt hívja
Következő:export néven elnevezett export és alapértelmezett export
 Háziúr| Közzétéve 2019. 06. 02. 20:39:24 |
Közzétéve 2021. 09. 17. 9:11:00 |
Haladéktalan:A szerzőket kitiltják vagy eltávolítják, a tartalmak automatikusan blokkolódnak
Közzétéve 2021. 12. 21. 18:26:43 |
Tanulj és tanulj a bérbeadó módszereiből
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com