Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 32015|Atbildi: 3

[HTML / HTML5] Izmantojiet FileReader.readAsArrayBuffer(), lai apstrādātu lielus failus pārlūkprogrammā

[Kopēt saiti]
Publicēts 02.06.2019 20:35:17 | | | |
HTML5 FileReader API ļauj klienta pārlūkprogrammai lasīt lietotāja lokālos failus, lai serveris vairs nelasītu augšupielādēto failu, kas ievērojami samazina servera slogu un ietaupa laiku, kas nepieciešams faila augšupielādei. Tomēr praksē es atklāju, ka es varu viegli apstrādāt 300k žurnālfailu ar FileReader.readAsText(), bet, ja žurnālfails ir tik liels kā 1G vai pat 2G, pārlūks avarēs. Tas ir tāpēc, ka readAsText() ielādēs mērķa failu atmiņā uzreiz, izraisot atmiņas ierobežojuma pārsniegšanu. Tātad, ja tīmekļa lietojumprogrammai bieži ir jāapstrādā lieli faili, mums jāizmanto FileReader.readAsArrayBuffer(), lai lasītu failus pa gabalam.

Testa scenārijs

Mūsu scenārijs ir vienkāršs, proti, izmantot JavaScript, lai iegūtu IIS žurnāla laika diapazonu

IIS žurnālu paraugi:

#Software: Microsoft interneta informācijas pakalpojumi 10.0
#Version: 1.0
#Date: 2016-08-18 06:53:55
#Fields: datums laiks s-ip cs-metode cs-uri-stem cs-uri-query s-port cs-lietotājvārds 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)+patīk+Gekons - 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)+patīk+Gekons - 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
Mūsu mērķis ir iegūt šī žurnāla laika grafiku:

Sākuma laiks: 2016-08-18 06:53:55
Beigu laiks: 2016-08-18 08:46:44

Izmantojiet readAsText() ieviešanu

ReadAsText() izmantošana ir salīdzinoši vienkārša, pēc visa faila virknes iegūšanas iegūstiet katras rindas pirmās 19 rakstzīmes no sākuma, nosakiet, vai datuma formāts ir izpildīts, ja tas ir apmierināts, tad šīs 19 rakstzīmes ir sākuma laiks, un tas pats iet cauri katrai rindai no astes, lai iegūtu beigu laiku, kods ir šāds:


IIS žurnāla parauga (izmērs: 1k) darbības rezultāti ir tādi, kādus mēs gaidījām.



Bet, kad mēs izvēlēsimiesLielāks IIS žurnāls (izmērs: 2G) un pārlūkprogramma avarē。 Iemesls ir tāds, ka readAsText() vispirms ielādēs visu failu atmiņā, tādēļ, ja fails ir pārāk liels, nebūs pietiekami daudz atmiņas un pārlūkprogrammas process avarēs.


Izmantojiet readAsArrayBuffer() ieviešanu

Tā kā JavaScript faila objekts manto no Blob, mēs varam izmantot Blob.slice() metodi, lai sagrieztu failu mazos gabaliņos, vispārējā ideja ir:

Vispirms paņemiet pirmos 10k faila saturu un konvertējiet to tekstā
Paņemiet katras rindiņas pirmās 19 rakstzīmes no sākuma, lai noteiktu, vai datuma formāts ir izpildīts, un, ja tā, šīs 19 rakstzīmes ir sākuma laiks
Pēc tam faila beigās paņemiet 10k saturu un pārveidojiet to tekstā
Līdzīgi, šķērsojiet katru līniju no astes satura, lai iegūtu beigu laiku

Kods ir šāds:


Izmantojot readAsArrayBuffer(), mēs varējām iegūt vēlamos rezultātus ļoti īsā laikā, pat ar vairāk nekā 2G IIS žurnāliem.






Iepriekšējo:php izsauc SMS verifikācijas koda interfeisu
Nākamo:Eksportēšana ar nosaukumu Eksportēšana un noklusējuma eksportēšana
 Saimnieks| Publicēts 02.06.2019 20:39:24 |
Publicēts 17.09.2021 09:11:00 |
Uzvedne:Autori tiek aizliegti vai noņemtais saturs tiek automātiski bloķēts
Publicēts 21.12.2021 18:26:43 |
Mācieties un mācieties no saimnieka metodēm
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com