Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 32015|Απάντηση: 3

[HTML/HTML5] Χρησιμοποιήστε το FileReader.readAsArrayBuffer() για να χειριστείτε μεγάλα αρχεία στο πρόγραμμα περιήγησης

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2/6/2019 8:35:17 μ.μ. | | | |
Το FileReader API της HTML5 επιτρέπει στο πρόγραμμα περιήγησης πελάτη να διαβάζει τα τοπικά αρχεία του χρήστη, έτσι ώστε το μεταφορτωμένο αρχείο να μην διαβάζεται πλέον από τον διακομιστή, γεγονός που μειώνει σημαντικά την επιβάρυνση του διακομιστή και εξοικονομεί τον χρόνο που απαιτείται για τη μεταφόρτωση του αρχείου. Ωστόσο, στην πράξη, διαπίστωσα ότι μπορώ εύκολα να χειριστώ ένα αρχείο καταγραφής 300k με το FileReader.readAsText(), αλλά όταν το αρχείο καταγραφής είναι τόσο μεγάλο όσο 1G ή ακόμα και 2G, το πρόγραμμα περιήγησης θα διακοπεί. Αυτό συμβαίνει επειδή η readAsText() θα φορτώσει το αρχείο προορισμού στη μνήμη ταυτόχρονα, με αποτέλεσμα η μνήμη να υπερβεί το όριο. Επομένως, εάν η εφαρμογή Ιστού χρειάζεται συχνά να επεξεργάζεται μεγάλα αρχεία, θα πρέπει να χρησιμοποιήσουμε το FileReader.readAsArrayBuffer() για να διαβάσουμε τα αρχεία κομμάτι-κομμάτι.

Σενάριο δοκιμής

Το σενάριό μας είναι απλό, το οποίο είναι να χρησιμοποιήσουμε JavaScript για να λάβουμε το χρονικό εύρος ενός αρχείου καταγραφής IIS

Δείγματα αρχείων καταγραφής IIS:

#Software: Υπηρεσίες Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2016-08-18 06:53:55
#Fields: ημερομηνία ώρα 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; +ΟΥΑΟΥ64; +Τρίαινα/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; +ΟΥΑΟΥ64; +Τρίαινα/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; +Νίκη64; +x64; +Τρίαινα/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; +Νίκη64; +x64; +Τρίαινα/7.0; +rv:11.0)+like+Gecko - 200 0 0 6
Στόχος μας είναι να λάβουμε το χρονικό πλαίσιο αυτού του αρχείου καταγραφής:

Ώρα έναρξης: 2016-08-18 06:53:55
Ώρα λήξης: 2016-08-18 08:46:44

Χρησιμοποιήστε την υλοποίηση readAsText().

Η χρήση του readAsText() είναι σχετικά απλή, αφού λάβετε τη συμβολοσειρά ολόκληρου του αρχείου, λάβετε τους πρώτους 19 χαρακτήρες κάθε γραμμής από την αρχή, προσδιορίστε εάν πληρούται η μορφή ημερομηνίας, εάν ικανοποιείται, τότε αυτοί οι 19 χαρακτήρες είναι η ώρα έναρξης και το ίδιο περνάει από κάθε γραμμή από την ουρά για να λάβετε την ώρα λήξης, ο κωδικός έχει ως εξής:


Τα τρέχοντα αποτελέσματα του δείγματος αρχείου καταγραφής IIS (μέγεθος: 1k) είναι όπως τα περιμέναμε.



Αλλά μόλις επιλέξουμεΈνα μεγαλύτερο αρχείο καταγραφής IIS (μέγεθος: 2G) και το πρόγραμμα περιήγησης διακόπτεται。 Ο λόγος είναι ότι το readAsText() θα φορτώσει πρώτα ολόκληρο το αρχείο στη μνήμη, οπότε αν το αρχείο είναι πολύ μεγάλο, δεν θα υπάρχει αρκετή μνήμη και η διαδικασία του προγράμματος περιήγησης θα διακοπεί.


Χρήση της υλοποίησης readAsArrayBuffer()

Δεδομένου ότι το αντικείμενο File στο JavaScript κληρονομεί από το Blob, μπορούμε να χρησιμοποιήσουμε τη μέθοδο Blob.slice() για να κόψουμε το αρχείο σε μικρά κομμάτια, η γενική ιδέα είναι:

Αρχικά, πάρτε τα πρώτα 10k περιεχόμενα του αρχείου και μετατρέψτε το σε κείμενο
Πάρτε τους πρώτους 19 χαρακτήρες κάθε γραμμής από την αρχή για να προσδιορίσετε εάν πληρούται η μορφή ημερομηνίας και, εάν ναι, αυτοί οι 19 χαρακτήρες είναι η ώρα έναρξης
Στη συνέχεια, πάρτε το περιεχόμενο 10k στο τέλος του αρχείου και μετατρέψτε το σε κείμενο
Ομοίως, διασχίστε κάθε γραμμή από το περιεχόμενο της ουράς για να λάβετε την ώρα λήξης

Ο κωδικός έχει ως εξής:


Χρησιμοποιώντας το readAsArrayBuffer(), μπορέσαμε να λάβουμε τα αποτελέσματα που θέλαμε σε πολύ σύντομο χρονικό διάστημα, ακόμη και με περισσότερα από 2G αρχεία καταγραφής IIS.






Προηγούμενος:Η php καλεί τη διεπαφή κωδικού επαλήθευσης SMS
Επόμενος:εξαγωγή με όνομα εξαγωγή και προεπιλεγμένη εξαγωγή
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2/6/2019 8:39:24 μ.μ. |
Δημοσιεύτηκε στις 17/9/2021 9:11:00 π.μ. |
Προτροπή:Οι συντάκτες αποκλείονται ή καταργούνται, το περιεχόμενο αποκλείεται αυτόματα
Δημοσιεύτηκε στις 21/12/2021 6:26:43 μ.μ. |
Μάθετε και μάθετε από τις μεθόδους του ιδιοκτήτη
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com