feilkodet.

Internett er et hack.

Post navigasjon.

nettsteder som spiller timing roulette.

I noen dager i november sa New York Times serenely white i Opera:

Du tror kanskje at det ikke var noe nyttverd pa planeten. Dessverre var det ikke starten pa en ny og fredelig verdensorden, det var bare deres JavaScript-spill timing roulette:

Hva gjor det? Denne koden sier «har en 0 millisekunds pause, og legg deretter til denne SCRIPT-taggen i dokumentet». (Ved «0 millisekund» betyr det en slags «sa snart du kommer til det».) Problemet med det er at hvis nettleseren skjer for a fullfore lastingen av dokumentet for du kjorer dokumentet document.write (), vil det Skift gjeldende dokument med en enkelt, usynlig SCRIPT-tag.

Opera, som gjorde sitt beste for a prove a vise deg siden sa snart som mulig, fullforte lastingen av dokumentet for du kom tilbake til timeouten & # 8211; sa siden ble overskrevet og forsvunnet.

Na, ved det ovenfor hores det ut som det er en ulempe a v re rask (igjen?). Vent til du ser et utdrag av noen kode som brot bildeopplastingen pa Orkut:

I dette tilfellet, hvis tidsavbruddet gar for vi har sett BODY-taggen & # 8211; det vil bryte, fordi det ikke eksisterer noe dokument. Vent, pa New York Times var det en feil, og det var en feil, og her ble vi straffet fordi vi ikke kom til BODY enna nar vi kjorte timeout? Sa vi er samtidig for fort for NYTimes og for sakte for Orkut ..

Dette er JavaScript timing roulette & # 8211; slike ting skjer nar nettsteder skrives i henhold til tidspunktet for bestemte nettlesere, eller til og med hastigheten til nettverksforbindelsen som webutvikleren bruker! Hva ville skje hvis du besoker Orkut pa en veldig langsom tilkobling, og nettverket har en liten hikepause mellom HEAD og BODY? Med Orkut kode ville jeg ikke bli overrasket om visse forsinkelser i nettverket & # 8211; bare noen fa millisekunder & # 8211; ville odelegge nettstedet helt.

Og det blir verre. AOL-nettsteder prover ofte a starte lysbildefremvisninger i popup-vinduer. I Opera som ikke gar veldig bra:

AOL er en annen gambler avhengig av a spille timingrouletten. B r med meg, fordi dette blir komplisert & # 8211; men de har noe som helst.

Popup_includes.js inneholder kode som legger til eksterne skript til HEAD. De endelige eksterne skriptene (ke_kit_refresh.js) inneholder ytterligere inline-kode som kaller rederPopupPage () som kaller en metode i apnervinduet som til slutt kaller embedswf () -metoden som begynner a lete etter elementet med ID’en «news-news_popup_foobar» (hvor «foobar» er faktisk kortnavnet for artikkelen).

Siden lasting av skript blokkerer parsing, har vi enna ikke nadd DIV nar lysbildeserien skal settes inn. Sa nar skriptet spor «har du elementnyhetene-news_popup_foobar? & Quot; Opera svarer «nei, ikke enna uansett» og skriptet gir bare opp.

Sa, tilsynelatende, skulle vi fortsette a analysere fremover mens vi kjorer skript som er dynamisk lagt til tidligere i DOM ?! W3C har aldri fortalt oss det, tror jeg. Det er webens morke materie som slar igjen.

Dele denne:

34 tanker om & ldquo; nettsteder som spiller timing roulette & rdquo;

Sa, sier du at NYTime og Orkut jobber i andre nettlesere, er bare ren flaks? Eller er det noen ukjente regler du prover a finne ut? BTW, * skal * document.write noensinne overskrive det nav rende dokumentet? Jeg trodde det alltid lagt til i dokumentet og at dokumentet.open var funksjonen som slettet dokumentet?

Ja, dette er hvordan nettlesere jobber. Det har ingenting a gjore med spec. Dette er grunnen til at moderne rammeverk poll document.readyState a finne ut nar kroppen har lastet inn og bare da er koden kjort. Det er ganske lamt a se at store nettsteder som NYT ikke er klar over dette.

Anonym skriver: Det er derfor du bor bruke Safari 4 eller Firefox 3 i stedet. De ser ut til a fungere riktig med alle disse problemene.

& Gt; Det er derfor du bor bruke Safari 4 eller Firefox 3 i stedet. Fantastisk ide. Faktisk, la oss ga tilbake i var tidsmaskin, tilbake til 2002 da IE6 var den eneste nettleseren som virker awesomely overalt, og alle de marginale nettleserne som Safari og Firefox fortsatte a bryte fordi de ikke implementerte noen funksjon som fungerte veldig bra i IE6.Or .. vi prover faktisk a opprettholde webutviklere til en hoyere standard enn «vel, den fungerer i boksen min, sa nettleseren ma suge, selvsagt.»

snuxoll skriver: & # 039; riktig & # 039; er subjektiv, jeg er ikke en Opera bruker (ikke mye omsorg for det i det hele tatt, faktisk), men utviklere burde vite bedre. Jeg trekker i jQuery * JUST * for $ .ready () i disse dager, og unnga slike problemer.

snuxoll slo neglen pa hodet, JQuery har behandlet denne logikken ganske bra, og du kan trekke den inn bare for denne funksjonen alene. Ja, jeg vet, absurd overhead. Nar det er sagt, hvorfor noen pa et stort nettsted ikke bruker flagg vars for denne sorta-tingen er galskap. Hvordan blir du ansatt pa et hoyt trafikksted uten a vite hvordan du bruker flagg vars (Booleans pa noe normalt sprak) for a se etter denne typen ting? Jeg sa jeg lastebil i Florida som sa «Kvalitet nettsteder for $ 297» i bakvinduet. Jeg onsket a kvele den fyren for a underminere vart yrke.

Du har helt rett, hallvors. Det er veldig overraskende andre nettlesere som kunne handtere usikre setTimeouts. For ovrig implementerte Firefox og Safari (i deres betaversjoner) Spekulativ lasting, som laster eksterne skript og lagrer dem til riktig skriptetikett vises. Det gjor en nettleser langt robust mot «nettverkshikke» og, det er ikke vanskelig for Opera ogsa a implementere det. Nar skal vi se det.

& Gt; BTW, * skal * document.write noensinne overskrive det nav rende dokumentet? Jeg trodde det alltid lagt til dokumentet, og at dokumentet.open var funksjonen som slettet dokumentet? Ja, det burde. Hvis dokumentet har fullfort lasting, torker document.write det ut. Det er sannsynligvis i en spesifikasjon et sted, men det er oppforselen til IE6 & # 8211; IE8, alle Firefox, Opera, og alt Webkit basert.

@edvakf: Jeg er ikke sikker, men kanskje «Forsinket script-utforelse» opera: config-alternativ gjor det? Som for document.write, er det alltid hyggelig a se en funksjon a gjore to forskjellige ting pa forskjellige tidspunkter. Jeg vil ikke * vite hvilken idiot som tenker pa den ene

har de 2 sidene lest innlegget ditt? Sidene jobber na.

Det er derfor du bor bruke Safari 4 eller Firefox 3 i stedet. De ser ut til a fungere riktig med alle disse problemene.

Safari bruker nettstedsspesifikke hack, jeg er ikke sikker pa om FireFox, men gjetningen min er noe simalar. Sa de har ogsa problemer.

Det er en grunn til a bruke document.onload og andre former for script deferrence. Nar du manipulerer dom, vil du sorge for at dom faktisk er lastet. Det er ikke som disse teknikkene er helt nye, eller noe. Jeg vil egentlig ikke at nettlesere skal ga tilbake til a gjenskape hva det kan v re forfatteren som er ment. Vi har sett for mye av det allerede. Forfattere bor vite hva de gjor, og ellers bli sparket.

Hvem er trygg nok i plattformen en bruker vil bruke til a lage noe som er gal? WTF har skjedd med denne nettsiden? Jeg skjonner at det var mer lonnsomt a lage nettsteder enn a stjele biler og endre yrker?

Sa, sier du at NYTime og Orkut jobber i andre nettlesere, er bare ren flaks? Eller er det noen ukjente regler du prover a finne ut?

Jeg tror det er litt av begge. Det endelige problemet er sannsynligvis en uskreven regel & # 8211; det er litt motintuitivt at hvis du har et dokument med SCRIPT id = aSCRIPT id = bDIV id = cin markup, kan ingen av skriptene se DIV. Men hvis du har SCRIPT ID = bDIV id = cand «script b & quot; inneholder kode som legger inn «skript et» gjennom DOM-skriptet bor en se DIV. Du ender opp med akkurat den samme DOM-strukturen enda «skript et» kjorer nar DOM er i en annen tilstand, og i AOL-siden sitter oppforselen veldig annerledes.

har de 2 sidene lest innlegget ditt? Sidene jobber na.

NYTimes lost det ganske raskt & # 8211; Jeg tror ikke vi kom til a klage til dem om det. Ganske god ventetid nar de trengte a fikse en feil: ja :. Orkut-problemet var slags maskert av noen andre problemer & # 8211; Jeg vil legge til noen browser.js-oppdateringer som loser et problem med opplasting av avatar, og med det problemet ut av veien jeg kom over dette. Og AOLs popup lysbilde er selvfolgelig fortsatt odelagt .. @ edvakf og Andrew Gregory: Forsinket scriptutforelse er faktisk lik den «spekulative lastingen» & # 8211; men kanskje litt mer ambisios. Hvis den er feilfri og forbedrer oppfattet ytelse (som det logisk burde), ville det v re fint a aktivere det som standard;) Jo storre punkt i denne artikkelen er den skrivekoden som avhenger av en bestemt ikke-spesifisert, implisitt timing av hendelser er en darlig ide. Periode. Vil du ha et nettsted som bryter hvis en nettleser forbedrer parsing og DOM-ytelse? Onsker du et nettsted som bryter hvis TCP-pakken som inneholder BODY start-tag, er litt forsinket av et sakte nettverk? Selvfolgelig ikke.

Hvilken AOL-link triggere feilen?

slik at du har vist oss problemet. hva skal du gjore med det? fordi verden er brutal, og folk onsker a se siden i stedet for noen geeky forklaringer pa hvorfor andre nettlesere gjor feil for a vise deg sidene, hvis safari / ff bruker spekulativ lasting eller noe annet triks som gjor slik rotet arbeid & # 8211; Jeg vil at opera bruker det ogsa. Jeg vil ikke lese hvorfor nettleseren ikke fungerer, jeg vil at nettleseren skal jobbe. det er mange andre nettlesere rundt, og de jobber ‘# 039; pa slike nettsteder & # 8230;

«slik at du har vist oss problemet. hva skal du gjore med det? «Jeg antar at Opera trenger a senke. Ytelsen blir fordomt. Hvis det blir for fort, bryter Opera, bedre Opera, sa er det sa tregt som andre nettlesere!

& Gt; folk vil se siden i stedet for noen geeky & gt; forklaringer Denne bloggen handler om «geeky forklaringer», dumbass. Innlegg i en blogg er ikke i ferd med a fikse noe, men siden noen mennesker faktisk onsker a utdanne seg selv (i motsetning til deg), er blogginnlegg som forklarer de nordige tingene bak kulissene gode nyheter. Jeg antar at du er allergisk mot kunnskap, fordi du tror pa en eller annen mate at du ikke legger ut om de nordige detaljene, vil opprette nettstedet pa en magisk mate.

Chas4: mest av eller alle «funksjonen historier» pa f.eks. http://www.aolhealth.com/ har dette problemet & # 8211; klikk gjennom til artikkelen, prov deretter a starte lysbildeserien & # 8211; bare den tomme popupen vises.

slik at du har vist oss problemet. hva skal du gjore med det?

Vel, mr. Anonym, den vanlige boringen: Pass pa at feilene rapporteres, analyseres, gi tilstrekkelig hoy prioritet, skriv testtilfellene, foreslar hoflig til webmastere at disse nettstedene kanskje vil flytte sine SCRIPT-elementer under elementene de stoler pa, skriv browser.js-oppdateringer som gjor at nettstedene fungerer, selv om de er avhengige av ikke-dokumentert magisk timingflaks, regresjonstest av fikserne nar utviklere skriver dem, fjerner browser.js-oppdateringer hvis fikseringene fungerer, og blogger om eventuelle interessante observasjoner i prosessen. Hvis det er noe annet du tror jeg skal gjore med det, er jeg alle orer.

Ser ut som det kan v re. Takk

Denne siden, som er lagt inn i denne traden, ser ut til a vise lignende oppforsel. I det minste fungerer det bare med javascript slatt av.

huh skriver: @ FataL, hvorfor kaprer du kommentar-delen med irrelevante ting?

@huh, jeg tror det er relevant siden det ogsa er JavaScript og tidsrelatert.

huh skriver: @FataL, bare fordi det nevner JavaScript, betyr det ikke at det handler om alt og alt. Dette er tydelig om bestemte nettsteder og ikke JS generelt eller noe sant.

Daniel Colascione skriver: Og igjen l rer vi pa nytt leksjonene operativsystemene folk l rte pa 80-tallet. Leksjon av dagen? Internett gjor ikke at raseforholdene forsvinner magisk. Du ma v re like kompetent i dette feltet som i noen andre.

Daniel skrev: «Du ma v re like kompetent i dette feltet som i noen andre.» Dette er ganske sant. Jeg har jobbet innen programvareprogrammering i over 15 ar. Alle som jobber pa et hvilket som helst felt i lengre tid, ser nye mennesker inn og gjor de samme feilene. Dette er et problem med mangel pa utdanning. Vanligvis starter dette problemet med prosjektlederen.

@hallvorsApologies for off-topic igjen. Den Forsinkede Script Execution fungerer pa samme mate som Spekulativ Lasting. Tross alt er det en funksjonalitet for en mobil nettleser sa langt jeg foler. Ja, det ble slatt pa i Opera Turbo-utgaven som bare ble avduket, men jeg kan lett forestille seg et skript (bade sideskript og brukerskript) som ikke fungerer nar det er slatt pa. En apenbar ting jeg fant var Operaen med forsinket Script-utforelse vant ikke lenger DOMContentLoaded-arrangementet. Jeg er helt sikker pa at det vil pavirke browser.js oppforsel ogsa. Siden det tilsynelatende bare er Opera som ikke allerede implementerer spekulativ innlasting blant de 5 storste nettleserne, haper jeg sterkt Opera enten a finjustere forsinket scriptutforelse for a v re problemfri, eller a ha Spekulativ Loading.http: // stevesouders .com / ua / Bare en tanke uansett.

Hei edvakf, forst og fremst: Nar jeg testet med en enkel TC, virker Opera a sende DOMContentLoaded ogsa nar forsinket scriptutforelse er aktivert. Hvis du ser slike problemer, kan du peke meg til en side der dette skjer? (Testen jeg brukte var like enkelt som a sette denne brikken i en HTML-fil:

sa det kan vel v re scenarier denne testen ikke fanget hvor det mislykkes) For det andre, a aktivere forsinket script-utforelse bor ikke fikse AOL-problemet jeg nevner, faktisk. Dette skyldes at implementeringen av forsinket utforelse gar langt for a sikre at skriptet som kjorer etter analysering, ser DOM som det ville v re hvis skriptet kjorte normalt. A gjore ting annerledes forarsaket noen problemer & # 8211; Et eksempel jeg husker var en reload-sloyfe pa milonic.com hvor en rammebryter sjekker top.frames.length ble forvirret av en IFRAME etter manuset. Siden top.frames.length var storre enn forventet, provde manuset a «bryte ut» av det antatte rammesettet .. Sa hensikten med forsinket utforelse er at det a gjore det ikke burde gjore noen forskjell fra det lopende skriptets synspunkt.

(Og BTW & # 8211; her er et av problemene med implementering av «spekulativ parsing» eller noen form for parsing-forward-while-running-script-ting: om det vil fikse eller odelegge ting, er det et sporsmal om a simulere tidspunktet for de andre nettleserne som gjor det. Tenk deg at et nettsted som krever forsparsing som AOL tilsynelatende gjor. Tenk deg at det ble testet med nettlesere som mens du venter pa et innkommende skript, analyserer i gjennomsnitt 15 elementer og fremover. Forestill Opera a implementere dette og optimalisere parseren til parsel 35 elementer og fremover i stedet for, og det kan ikke v re hva skriptet forventer heller. Rammeoppbrukeropplevelsen viser at vi sannsynligvis vil kaste et sted, et sted.)

@hallvorsI testet denne UserJS.

Uten forsinket Script-utforelse slatt pa, er konsollmeldingene under;

pa bade http://portal.opera.com/upgrade/ og http://www.google.no/ Da jeg slatt pa DSE, far jeg ABSOLUTT ingen meldinger pa http://portal.opera.com/upgrade/ , men akkurat den samme meldingen som ovenfor pa http://www.google.ca/I’m pa Opera 9.64, forresten. PS. Jeg er helt for ideen om at nettsteder ikke bor stole pa bestemte nettlesere & # 039; gjennomforing. Jeg lurte bare pa om Opera ble etterlatt fra mengden.

Jeg kan ikke reprodusere dette i Opera 10 (ikke testet 9.6x enna) sa forhapentligvis er det fast.

Takk for innsikt i hvordan Opera handterer og noen ganger lider av denne typen JS-timing i webdesign. Veldig interessant a se hvordan Opera er uventet fort, i noen tilfeller. Btw, jeg prover a utfore «forsinket script-utforelse» i lates Opera alpha build, og det virker litt raskere & # 8230; Vil fortsette a spille med det og gi tilbakemelding & # 8230;