Προγραμματισμός

7 χρόνια σφάλματα προγράμματος περιήγησης που μαστίζουν τον Ιστό

Τα προγράμματα περιήγησης στο Web είναι καταπληκτικά. Εάν δεν ήταν για προγράμματα περιήγησης, δεν θα μπορούσαμε να συνδεθούμε σχεδόν καλά με χρήστες και πελάτες, ρίχνοντας τα δεδομένα και τα έγγραφά μας στους επιτραπέζιους υπολογιστές, τα tablet και τα τηλέφωνά τους. Δυστυχώς, όλο το υπέροχο περιεχόμενο που παραδίδεται από το πρόγραμμα περιήγησης ιστού μας κάνει πολύ πιο απογοητευμένους όταν η απόδοση δεν είναι τόσο κομψή ή χωρίς σφάλματα όσο θα θέλαμε.

Όσον αφορά την ανάπτυξη ιστοτόπων, είμαστε τόσο στο έλεος των προγραμμάτων περιήγησης όσο έχουμε χρεωθεί σε αυτούς. Οποιαδήποτε δυσλειτουργία σε οποιαδήποτε πλατφόρμα ξεπηδά, ειδικά όταν συντρίβει τα μηχανήματα των χρηστών μας. Και με τον σχεδιασμό ως εξαιρετική τιμή για να ξεχωρίζετε ή να ταιριάζετε, οποιαδήποτε γραμμή λίπους ή εσφαλμένη εφαρμογή χρώματος καταστρέφει την αισθητική εμπειρία που έχουμε εργαστεί για να δημιουργήσουμε. Ακόμη και το μικρότερο λάθος, όπως η προσθήκη ενός επιπλέον εικονοστοιχείου στο πλάτος μιας γραμμής ή η κακή ευθυγράμμιση ενός τραπεζιού με λίγο, μπορεί να οδηγήσει σε μια απογοητευτική εμπειρία χρήστη, για να μην αναφέρουμε το κόστος της ανακάλυψης, του ελέγχου και της αντιμετώπισής του.

Φυσικά, ήταν χειρότερο. Οι τεράστιες διαφορές μεταξύ των προγραμμάτων περιήγησης έχουν διαγραφεί σε μεγάλο βαθμό από τη συμμόρφωση με τα πρότυπα ιστού του W3C. Και οι διαφορές που απομένουν μπορούν γενικά να αγνοηθούν, χάρη στον πολλαπλασιασμό βιβλιοθηκών όπως το jQuery, οι οποίες όχι μόνο διευκολύνουν την παραβίαση του JavaScript αλλά και το χαρτί για τους τρόπους που τα προγράμματα περιήγησης δεν είναι τα ίδια.

Αυτές οι βιβλιοθήκες έχουν τη συνήθεια να παγώνουν σφάλματα προγράμματος περιήγησης. Εάν οι εταιρείες προγράμματος περιήγησης διορθώσουν μερικά από τα χειρότερα σφάλματα τους, οι νέες "επιδιορθώσεις" μπορούν να διαταράξουν τις παλιές ενημερώσεις κώδικα και να επιλύσουν. Ξαφνικά η «επιδιόρθωση» γίνεται το πρόβλημα που διαταράσσει την παλιά σταθερότητα που έχουμε ξαπλώσει γύρω από το σφάλμα. Οι προγραμματιστές δεν μπορούν να κερδίσουν.

Η σταθερότητα που έφεραν βιβλιοθήκες όπως το jQuery ενθάρρυνε επίσης τους κατασκευαστές προγραμμάτων περιήγησης να επιταχύνουν και να αυτοματοποιήσουν τις διαδικασίες ενημέρωσης του προγράμματος περιήγησής τους. Η Mozilla δεσμεύεται να προωθεί μια νέα έκδοση του Firefox κάθε λίγους μήνες. Στο παρελθόν, κάθε έκδοση θα ήταν ένας σταθερός στόχος για προγραμματιστές ιστού και θα μπορούσαμε να βάλουμε λίγο GIF στους ιστότοπούς μας ισχυριζόμενοι ότι λειτουργούν καλύτερα στο, ας πούμε, IE5. Τώρα το χιλιομετρητή γυρίζει τόσο γρήγορα που θα κυκλοφορήσει μια νέα έκδοση του Firefox τη στιγμή που χρειάζεται το HTML για να ταξιδέψει από το διακομιστή στον πελάτη.

Εν τω μεταξύ, ζητάμε από τα προγράμματα περιήγησης να κάνουν πολύ περισσότερα. Ο ιστότοπος της τοπικής εφημερίδας μου φέρνει το μηχάνημά μου στα γόνατα - επεκτεινόμενες διαφημίσεις popover, αποσπάσματα βίντεο που παίζουν αυτόματα, κωδικός για προσαρμογή διαφημίσεων στο πρόσφατο ιστορικό περιήγησής μου. Αν η κόρη μου κοιτάξει έναν ιστότοπο με κούκλες, η JavaScript προσπαθεί να βρει μια διαφήμιση με κούκλα για να μου δείξει. Όλα αυτά τα μαγικά αθροίζουν το CPU.

Όλα αυτά σημαίνει ότι τα σφάλματα του προγράμματος περιήγησης είναι πιο σπάνια, αλλά είναι πιο δύσκολο να εντοπιστούν. Ακολουθεί μια ματιά στα τελευταία είδη που προκαλούν σφάλματα στα προγράμματα περιήγησης - ή σε πολλές περιπτώσεις, απλά γκρίνια - σχεδιαστές και προγραμματιστές ιστοσελίδων.

Σχέδιο

Τα πιο ορατά σφάλματα προγράμματος περιήγησης είναι δυσλειτουργίες διάταξης. Η βάση δεδομένων Bug της Mozilla για σφάλματα περιέχει 10 ενότητες για προβλήματα διάταξης και δεν περιλαμβάνει ζητήματα διάταξης που έχουν κατηγοριοποιηθεί ως συσχετιζόμενα με το DOM, το CSS ή τον Καμβά. Η πιο σημαντική δουλειά του προγράμματος περιήγησης είναι η τακτοποίηση του κειμένου και των εικόνων, και η σωστή τους είναι συχνά δύσκολη.

Πολλά σφάλματα διάταξης μπορεί να φαίνονται μικρά έως σχεδόν εσωτερικά. Το σφάλμα Bugzilla 1303580, για παράδειγμα, καλεί τον Firefox να χρησιμοποιήσει την πλάγια έκδοση μιας γραμματοσειράς όταν οι ετικέτες CSS απαιτούν πλάγια. Ίσως μόνο ένας τοξικομανής να το παρατηρήσει. Εν τω μεταξύ, το σφάλμα Bugzilla 1296269 αναφέρει ότι τμήματα των γραμμάτων στο Comic Sans είναι κομμένα, τουλάχιστον στα Windows. Οι σχεδιαστές γραμματοσειρών κάνουν διάκριση και τους ενδιαφέρει. Όταν δεν μπορούν να έχουν την ακριβή σωστή εμφάνιση και αίσθηση σε όλα τα προγράμματα περιήγησης, οι σχεδιαστές ιστοσελίδων μπορεί να είναι λίγο υπερβολικά απογοητευμένοι.

Υπάρχουν εκατοντάδες, χιλιάδες, ίσως ακόμη και εκατομμύρια από αυτά τα σφάλματα. Στο, έχουμε αντιμετωπίσει προβλήματα με τις εικόνες που εξαφανίζονται στο πρόγραμμα επεξεργασίας CMS και τις ετικέτες span που εμφανίζονται μόνο στο DOM.

Διαρροές μνήμης

Είναι συχνά δύσκολο να παρατηρήσετε διαρροές στη μνήμη. Εξ ορισμού, δεν αλλάζουν ορατές ιδιότητες. Ο ιστότοπος αποδίδεται σωστά, αλλά το πρόγραμμα περιήγησης δεν καθαρίζεται μετά το γεγονός. Λίγα πάρα πολλά ταξίδια σε ιστότοπους που προκαλούν τη διαρροή και το μηχάνημά σας επιβραδύνει την ανίχνευση επειδή όλη η μνήμη RAM είναι κλειδωμένη κρατώντας μια δομή δεδομένων που δεν θα επανατοποθετηθεί ποτέ. Έτσι, το λειτουργικό σύστημα ανταλλάσσει φραγμούς μπλοκ εικονικής μνήμης στο δίσκο και περνάτε τον χρόνο σας περιμένοντας. Η καλύτερη επιλογή είναι να επανεκκινήσετε το μηχάνημά σας.

Οι λεπτομέρειες των σφαλμάτων διαρροής μνήμης μπορεί να είναι ενοχλητικά τρελές και είμαστε τυχεροί που ορισμένοι προγραμματιστές χρειάζονται χρόνο για να τα διορθώσουν. Εξετάστε το ζήτημα 640578 από τη στοίβα προγράμματος περιήγησης Chronium. Αλλαγή ενός μέρους του DOM παίζοντας με το innerHTML η ιδιότητα διαρρέει τη μνήμη. Ένα δείγμα κώδικα με μια σφιχτή επαναλαμβανόμενη κλήση βρόχου requestAnimationFrame θα αναπαραγάγει το πρόβλημα. Υπάρχουν δεκάδες ζητήματα όπως αυτό.

Φυσικά, δεν είναι πάντα λάθος του προγράμματος περιήγησης. Το ζήτημα Chromium 640922, για παράδειγμα, περιγράφει επίσης μια διαρροή μνήμης και παρέχει ένα παράδειγμα. Περαιτέρω ανάλυση, ωστόσο, δείχνει ότι το παράδειγμα κώδικα δημιουργούσε Ημερομηνία() αντικείμενα στο δρόμο για να δοκιμάσετε την ώρα, και πιθανότατα ήταν η πηγή του προβλήματος.

Λάμψη

Είναι αρκετά επίσημο. Όλοι έχουν ξεχάσει για τα υπέροχα έργα τέχνης και τα βίντεο ιστού κατά των ψευδώνυμων που έφερε το Adobe Flash στον Ιστό. Αντίθετα, το κατηγορούμε για όλες τις συντριβές που μπορεί ή όχι να ήταν δικό τους λάθος. Τώρα αποσύρεται επίσημα, αλλά δεν πηγαίνει γρήγορα. Ακόμη και μερικές από τις πιο μελλοντικές εταιρείες που προωθούν τα πρότυπα ιστού φαίνεται να έχουν κώδικα Flash στις σελίδες τους. Με εκπλήσσει πόσο συχνά βρίσκω τον κώδικα Flash εκτός των ιστότοπων MySpace και GeoCities.

Αγγίγματα και κλικ

Δεν είναι εύκολο να κάνετε ζογκλέρ στους διάφορους τύπους εισόδου, ειδικά τώρα που τα tablet και τα τηλέφωνα δημιουργούν πινελιές που μπορεί ή όχι να λειτουργούν σαν κλικ του ποντικιού. Δεν θα πρέπει να εκπλήσσει τότε που διαπιστώνουμε ότι υπάρχουν πολλά σφάλματα σε αυτήν την περιοχή. Το πλαίσιο JavaScript Bootstrap διατηρεί μια λίστα επιτυχιών με τα πιο ενοχλητικά σφάλματα και μερικά από τα χειρότερα πτώση αυτής της κατηγορίας.

Το Safari, για παράδειγμα, μερικές φορές θα χάσει τις κινήσεις των δακτύλων στο κείμενο στο ετικέτα (151933). Μερικές φορές το Τα μενού δεν λειτουργούν στο iPad επειδή το πρόγραμμα περιήγησης έχει μετατοπίσει το ορθογώνιο για αναζήτηση εισόδου (150079). Μερικές φορές τα κλικ προκαλούν ένα περίεργο κουνήμα στο στοιχείο - το οποίο μπορεί να μοιάζει ακόμη και να έγινε σκόπιμα από έναν νευρικό σχεδιαστή (158276). Όλα αυτά προκαλούν σύγχυση όταν το κείμενο ή οι εικόνες στην οθόνη δεν αντιδρούν με τον τρόπο που περιμένουμε.

βίντεο

Το σχέδιο ήταν πάντα η απλοποίηση της παράδοσης ήχου και βίντεο μεταφέροντας την ευθύνη μέσα στο πρόγραμμα περιήγησης και έξω από τον κόσμο των προσθηκών. Αυτό έχει εξαλείψει τα προβλήματα διεπαφής, αλλά δεν έχει καταργήσει όλα τα προβλήματα. Η λίστα των σφαλμάτων βίντεο είναι μεγάλη και πολλά από αυτά είναι πολύ ορατά. Η καταχώριση Bugzilla 754753 περιγράφει "κυρίως κόκκινα και πράσινα σποτ που περιέχουν διάφορες εικόνες φαντασμάτων" και την καταχώριση Bugzilla 1302991

Μερικά από τα πιο περίπλοκα ζητήματα προκύπτουν καθώς τα προγράμματα περιήγησης ενσωματώνουν τους διάφορους μηχανισμούς κρυπτογράφησης που έχουν σχεδιαστεί για την πρόληψη της πειρατείας. Το σφάλμα 1304899 προτείνει ότι ο Firefox δεν πραγματοποιεί αυτόματη λήψη του σωστού μηχανισμού κρυπτογράφησης (EME) από την Adobe. Είναι λάθος του Firefox; Adobe; Ή μήπως ένας παράξενος πληρεξούσιος;

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

Φτερούγισμα

Η ικανότητα της ιστοσελίδας να παρακολουθεί το ποντίκι που κινείται κατά μήκος της σελίδας βοηθά τους σχεδιαστές ιστοσελίδων να δώσουν στους χρήστες συμβουλές σχετικά με τις δυνατότητες που ενδέχεται να κρύβονται πίσω από μια εικόνα ή μια λέξη. Δυστυχώς, τα αιωρούμενα γεγονότα δεν ξεκινούν πάντα την αλυσίδα όσο πιο γρήγορα μπορούσαν.

Το νέο πρόγραμμα περιήγησης Microsoft Edge, για παράδειγμα, δεν κρύβει τον κέρσορα όταν το ποντίκι αιωρείται πάνω από μερικά στοιχεία εισαγωγής (817822). Μερικές φορές το αιωρούμενο δεν τελειώνει (5381673). Μερικές φορές το συμβάν αιωρήματος συνδέεται με λάθος στοιχείο (7787318). Όλα αυτά οδηγούν σε σύγχυση και αποθαρρύνουν τη χρήση ενός αρκετά τακτοποιημένου εφέ.

Κακόβουλο λογισμικό

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

Το πρόβλημα είναι ότι η διεπαφή επέκτασης είναι αρκετά ισχυρή. Μια επέκταση μπορεί να εισαγάγει αυθαίρετες ετικέτες και κώδικα σε όλους τους ιστότοπους. Στα δεξιά, αυτό είναι πολύ ωραίο, αλλά είναι εύκολο να δούμε πώς ο νέος κώδικας από την επέκταση μπορεί να ενσωματώσει τον κώδικα από τον ιστότοπο. Τι? Δεν θέλετε να επαναπροσδιορίσετε τη συμπεριφορά του $ λειτουργία?

Αυτό δεν είναι τόσο έντονο όσο ένα βαθύ, φιλοσοφικό πρόβλημα με ένα πολύ ωραίο χαρακτηριστικό. Αλλά με μεγάλη δύναμη έρχεται μεγάλη ευθύνη - ίσως μεγαλύτερο από ό, τι μπορεί να συγκεντρώσει ο προγραμματιστής επέκτασης. Ο καλύτερος τρόπος για να εξετάσετε αυτό το ζήτημα είναι να συνειδητοποιήσετε ότι είναι ο μόνος τομέας στον οποίο εμείς, οι χρήστες, έχουμε τον έλεγχο. Μπορούμε να απενεργοποιήσουμε τις επεκτάσεις και να τις περιορίσουμε σε λίγους ιστότοπους όπου δεν υπάρχουν προβλήματα. Το API είναι λίγο πολύ ισχυρό για καθημερινή χρήση - τόσο ισχυρό που είναι δελεαστικό να καλείτε επεκτάσεις API τα μεγαλύτερα σφάλματα όλων. Αλλά αυτό θα στερούσε ό, τι κάνει για εμάς.

Σχετικά Άρθρα

  • Πέρα από το jQuery: Ένας ειδικός οδηγός για τα πλαίσια JavaScript
  • Επανεξέταση: δοκιμάστηκαν 7 IDE JavaScript
  • Διακοπή HTML5: Πώς μετράνε τα Chrome, Safari, Firefox, IE και Opera
  • Επανεξέταση: 13 primo Python web framework
  • Η δύναμη του τεμπέλης προγραμματισμού
  • Κατεβάστε: Οδηγός ανάπτυξης σταδιοδρομίας προγραμματιστή
  • 7 κακές ιδέες προγραμματισμού που λειτουργούν
  • 9 κακές συνήθειες προγραμματισμού που λατρεύουμε κρυφά
  • 21 καυτές τάσεις προγραμματισμού - και 21 κρύες