7 kroničnih programskih pogrešaka u web pregledniku

Web preglednici su nevjerojatni. Da nije bilo preglednika, ne bismo se mogli povezati gotovo jednako dobro s korisnicima i kupcima ulijevanjem podataka i dokumenata u njihove radne površine, tablete i telefone. Nažalost, sav predivan sadržaj koji pruža web preglednik čini nas toliko frustriranijima kada prikazivanje nije toliko elegantno ili bez grešaka koliko bismo željeli.

Što se tiče izrade web stranica, mi smo jednako milosrdni preglednicima koliko smo im dužni. Svaka greška na bilo kojoj platformi iskoči, pogotovo kad padne na strojevima naših korisnika. A s dizajnom kao takvim premium za isticanje ili uklapanje, bilo koja masna linija ili pogrešno primijenjen dodir boje uništava estetsko iskustvo koje smo trudili stvoriti. Čak i najmanja pogreška, poput dodavanja dodatnog piksela širini crte ili pomalog poravnanja tablice, može rezultirati frustrirajućim korisničkim iskustvom, a da ne spominjemo troškove otkrivanja, provjere i rada oko njega.

Naravno, nekad je bilo i gore. Ogromne razlike između preglednika uglavnom su izbrisane vjernošću web standardima W3C. A razlike koje se ostaju mogu se općenito zanemariti, zahvaljujući širenju knjižnica poput jQueryja, koje ne samo da olakšavaju hakiranje JavaScripta, već i razmotriti načine na koje preglednici nisu isti.

Ove knjižnice imaju naviku zamrzavanja programskih pogrešaka na mjestu. Ako tvrtke preglednika isprave neke od svojih najgorih pogrešaka, novi "popravci" mogu poremetiti stare zakrpe i zaobilaznice. Odjednom "popravak" postaje problem koji narušava staru stabilnost koju smo nervozno namjestili oko greške. Programeri ne mogu pobijediti.

Stabilnost koju donose knjižnice poput jQuery također je potaknula graditelje preglednika da ubrzaju i automatiziraju svoje postupke ažuriranja preglednika. Mozilla se zalaže za izbacivanje nove verzije Firefoxa svakih nekoliko mjeseci. U prošlosti bi svaka verzija bila stabilna meta za web programere, a mi bismo mogli staviti malo GIF-a na naše web stranice tvrdeći da najbolje rade u, recimo, IE5. Sada se brojač kilometara okreće tako brzo da će nova verzija Firefoxa biti objavljena u vremenu koje treba HTML-u da putuje od poslužitelja do klijenta.

U međuvremenu, molimo preglednike da učine puno više. Web stranica mojih lokalnih novina baca moj stroj na koljena - proširivanje popover oglasa, video isječci koji se automatski reproduciraju, kodiranje za prilagođavanje oglasa mojoj nedavnoj povijesti pregledavanja. Ako moja kći pogleda web mjesto s lutkama, JavaScript grčevito pokušava pronaći oglas za lutku koji će mi se pokazati. Sve ovo čarobno zanosi CPU.

Sve to znači da su današnje greške u pregledniku rjeđe, ali ih je teže otkriti. Evo pogleda na najnovije žanrove grešaka u preglednicima koje muče - ili u mnogim slučajevima, jednostavno mučne - web dizajnere i programere.

Izgled

Najvidljivije greške u pregledniku su greške u rasporedu. Mozillina baza podataka bugova Buggilla sadrži 10 odjeljaka za probleme s izgledom, a to ne uključuje probleme s izgledom kategorizirane kao povezane s DOM-om, CSS-om ili platnom. Najvažniji posao preglednika je posložiti tekst i slike, a ispraviti ih često je teško.

Mnoge bugove izgleda mogu izgledati malene do te mjere da su gotovo ezoterične. Bugzilla bug 1303580, na primjer, poziva Firefox zbog korištenja kurzivne verzije fonta kada CSS oznake traže koso. Možda bi to primijetio samo ovisnik o fontu. U međuvremenu Bugzilla bug 1296269 izvještava da su dijelovi slova u Comic Sansu odsječeni, barem na Windowsima. Dizajneri fontova prave razliku i njima je važno. Kada ne mogu dobiti točan izgled i izgled svih preglednika, web dizajneri mogu postati pretjerano frustrirani.

Postoje stotine, tisuće, možda čak i milijuni tih bugova. Naišli smo na probleme sa slikama koje nestaju u našem CMS uređivaču i oznakama raspona koje se pojavljuju samo u DOM-u.

Curenje memorije

Često je teško primijetiti curenje memorije. Po definiciji, oni ne mijenjaju vidljiva svojstva. Web stranica je ispravno prikazana, ali preglednik se nakon toga ne čisti. Nekoliko previše putovanja na web stranice koje pokreću curenje i vaš stroj usporava do puzanja jer je sav RAM zaključan i sadrži podatkovnu strukturu koja nikada neće biti prenamijenjena. Dakle, OS mahnito mijenja blokove virtualne memorije na disk, a vi provodite vrijeme čekajući. Najbolji izbor je ponovno pokrenuti vaš stroj.

Pojedinosti o greškama u curenju memorije mogu biti ludo tajne i sretni smo što neki programeri odvoje vrijeme da ih poprave. Razmotrite izdanje 640578 iz hrpe preglednika Chronium. Promjena dijela DOM-a petljanjem po innerHTMLsvojstvu propušta memoriju. Uzorak komada koda s uskim ponovljenim pozivanjem petlje requestAnimationFrameduplicirat će problem. Postoje deseci ovakvih izdanja.

Naravno, nije uvijek kriv preglednik. Na primjer, izdanje Chromium 640922 također detaljno opisuje curenje memorije i daje primjer. Daljnja analiza, međutim, pokazuje da je primjer koda stvarao Date()objekte tijekom testiranja vremena, a oni su vjerojatno bili izvor problema.

Bljesak

Prilično je službeno. Svi su zaboravili na čudesna umjetnička djela protiv neravnina i web videozapise koje je Adobe Flash doveo na web. Umjesto toga, krivimo ga za sve padove koji su možda ili nisu bili krivnja za njega. Sada je službeno u mirovini, ali ne ide brzo. Čini se da čak i neke od najperspektivnijih tvrtki koje forsiraju web standarde još uvijek imaju Flash kod na svojim stranicama. Iznenađen sam koliko često nalazim Flash kod izvan web mjesta MySpace i GeoCities.

Dodiri i klikovi

Nije lako žonglirati s različitim vrstama unosa, pogotovo sada kada tableti i telefoni stvaraju dodir koji može ili ne mora djelovati poput klika mišem. Tada ne bi trebalo čuditi da na ovom području ima dosta bugova. JavaScript okvir Bootstrap čuva popis pogodaka koji najviše gnjeve i neke od najgorih pada u ovoj kategoriji.

Na primjer, Safari će ponekad propustiti tapkanje prstom po tekstu u oznaci (151933). Izbornici ponekad ne rade na iPadu jer je preglednik pomaknuo pravokutnik tražeći ulaz (150079). Ponekad klikovi pokrenu čudno pomicanje predmeta - što bi čak moglo izgledati kao da ga je namjerno izveo oštri dizajner (158276). Sve to dovodi do zabune kada tekst ili slike na zaslonu ne reagiraju onako kako mi očekujemo.

Video

Plan je uvijek bio pojednostaviti isporuku zvuka i slike premještanjem odgovornosti unutar preglednika i izvan svijeta dodataka. Ovo je uklonilo probleme sa sučeljem, ali nije uklonilo sve probleme. Popis video bugova je dugačak i mnogi od njih su previše vidljivi. Unos Bugzilla 754753 opisuje "uglavnom crvene i zelene mrlje koje sadrže razne slike duhova", a unos Bugzilla 1302991 "muca" zbog nedostatka bolje riječi. "

Neki od najsloženijih problema pojavljuju se kad preglednici integriraju različite mehanizme šifriranja osmišljene kako bi spriječili piratstvo. Bug 1304899 sugerira da Firefox ne preuzima automatski odgovarajući mehanizam šifriranja (EME) s Adobea. Je li kriv Firefox? Adobe-ove? Ili možda čudan proxy?

Video bugovi i dalje će dominirati. Integriranje web videa s drugim oblicima sadržaja dodavanjem video oznaka u HTML5 otvorilo je mnogim novim mogućnostima dizajnerima, ali svaka nova mogućnost znači nove mogućnosti za pojavu bugova i nedosljednosti.

Lebdenje

Sposobnost da web stranica prati miš koji se kreće po stranici pomaže web dizajnerima davati korisnicima natuknice o tome koje bi se značajke mogle skrivati ​​iza slike ili riječi. Jao, događaji koji lebde uvijek se ne probiju prema lancu što su brže mogli.

Na primjer, novi preglednik Microsoft Edge ne skriva pokazivač kada miš prelazi preko nekih stavki unosa (817822). Ponekad lebdenje ne prestaje (5381673). Ponekad je događaj lebdenja povezan s pogrešnom stavkom (7787318). Sve to dovodi do zabune i obeshrabruje upotrebu prilično urednog efekta.

Zlonamjerni softver

Iako je primamljivo svu krivnju za pogreške u pregledniku svaliti na programere preglednika, često je nepravedno. Mnogo problema uzrokuje zlonamjerni softver namijenjen predstavljanju korisnih proširenja ili dodataka. U mnogim slučajevima zlonamjerni softver čini nešto uistinu korisno dok potajno krade klikove ili trgovinu u pozadini.

Problem je u tome što je sučelje za proširenje prilično moćno. Proširenje može umetnuti proizvoljne oznake i kod na sve web stranice. U pravim je rukama ovo super, ali lako je vidjeti kako novi kôd iz proširenja može naletjeti na kôd s web mjesta. Što? Niste željeli redefinirati ponašanje $funkcije?

Ovo nije toliko greška koliko dubok filozofski problem s vrlo kul osobinom. Ali s velikom snagom dolazi i velika odgovornost - možda veća nego što je bilo koji programer produženja može prikupiti. Najbolji način da se sagleda ovaj problem je shvatiti da je to područje u kojem mi, korisnici, imamo kontrolu. Proširenja možemo isključiti i ograničiti ih na samo nekoliko web stranica na kojima nema problema. API je previše moćan za svakodnevnu upotrebu - toliko moćan da je primamljivo API-je proširenja nazvati najvećim bugovima od svih. Ali to bi poreklo sve što čini za nas.

Povezani članci

  • Izvan jQueryja: Stručni vodič za JavaScript okvire
  • Pregled: 7 JavaScript IDE-a stavljeno na test
  • Ispucavanje u HTML5: Kako se mjere Chrome, Safari, Firefox, IE i Opera
  • Pregled: 13 primo Python mrežnih okvira
  • Moć lijenog programiranja
  • Preuzimanje: Vodič za razvoj karijere programera
  • 7 loših programskih ideja koje rade
  • 9 loših programskih navika koje potajno volimo
  • 21 vrući programerski trend - i 21 hladan