Posts tonen met het label Browsers. Alle posts tonen
Posts tonen met het label Browsers. Alle posts tonen

donderdag 3 september 2009

JavaScript laden zonder de browser te blokkeren


Er zijn heel veel factoren die invloed hebben op de snelheid waarmee een webpagina wordt afgebeeld. Zaken zoals het aantal requests per pagina, het wel of niet gebruik maken van een Content Delivery Network, het instellen van gzip voor bepaalde type content en een juiste plaatsing van scripts en stylesheets in de pagina, dragen allemaal bij aan de ervaring die de gebruiker heeft als hij de pagina opvraagt. Als de ontwikkelaar te veel van deze zaken fout aanpakt, dan zal hij de woede van de gebruiker op zijn hals halen en wellicht hevig bloedend ergens in een greppel treurig aan zijn einde komen.

Er zijn twee lekker pragmatische en niet te dikke boeken over deze onderwerpen geschreven die ik even wil aanstippen: “High Performance Web Sites” en “Even Faster Web Sites”, beide van Steve Souders (http://stevesouders.com/hpws/rules.php). Beide boeken zijn binnen ISAAC in ieder geval verplichte kost voor alle web develeopers.

In deze blogpost wil ik een van de technieken uit het tweede boek kort introduceren: “JavaScript laden zonder de browser te blokkeren”. Het probleem dat hier speelt is dat scripts die worden geladen m.b.v. een SCRIPT tag tot gevolg hebben dat de browser helemaal niets anders zal downloaden tijdens het laden en interpreteren van deze code. Dit alles kan resulteren in een significante verlenging van de laadtijd en dus tot een tragere pagina. Zonde, want browsers kunnen in theorie meerdere bestanden parallel downloaden.

De reden dat de browser niets anders downloadt is dat de JavaScript die op dat moment wordt gedownload de rest van de pagina kan wijzigen na executie. Het aantal en de volgorde van de andere resources kan afwijken van wat er in de oorspronkelijke HTML is gespecificeerd (bv met de document.write(…) constructie). Dit wijzigen van de HTML is in het overgrote deel van de gevallen helemaal niet aan de orde en resulteert dus in een onnodig lange laadtijd. Daarnaast is de volgorde waarin externe JavaScript bestanden zijn gedefinieerd in de HTML tevens de volgorde waarin ze moeten worden geëxecuteerd door de browser. Deze executievolgorde is eigenlijk niet van belang voor de volgorde waarin de scripts worden gedownload, iets dat tot nu toe alleen de ontwikkelaars van IE8, Safari 4 en Chrome 2 hebben begrepen: deze browsers ondersteunen het parallel downloaden van scripts wel. Andere resources worden echter wel nog steeds geblokkeerd.

In “Even Faster Web Sites” worden een aantal technieken geïntroduceerd die dit probleem (ten dele) oplossen. Ik zal deze hier kort introduceren. Voor de details verwijs ik echter door naar het boek zelf.

XHR Eval.
In deze techniek worden de scripts met een XMLHttpRequest gedownload en vervolgens met een aanroep van eval() geïnterpreteerd. Dit werkt: de browsers blokkeren het downloaden van de andere resultaten niet. Het grote probleem is echter dat je op deze manier alleen scripts kan laden die van hetzelfde domein komen als de pagina zelf.

XHR Injection
Deze methode lijkt enigszins op de voorgaande: het script wordt geladen mb.v. de XMLHttpRequest functie, maar wordt geëxecuteerd door een SCRIPT tag in de DOM te creëren en de gedownloade code daarin te injecteren. Deze methode is soms iets sneller dan het gebruik van eval(), maar lijdt onder dezelfde beperkingen.

Script in Iframe
Iframes worden parallel geladen met andere componenten op een pagina. Door in iframe’s HTML pagina’s te laden die verwijzen naar de gewenste scripts, worden deze scripts dus parallel gedownload. Ook deze techniek is beperkt tot scripts die op hetzelfde domein staan als de hoofdpagina zelf. Bovendien moet de code worden aangepast om een verbinding tussen de hoofd- en de iframepagina te leggen.

Script DOM Element
Als alternatief voor het initieel opnemen van een SCRIPT tag in de HTML, kan er ook een on-the-fly worden gecreëerd m.b.v. document.createElement(…). Deze tag wordt dan dynamisch voorzien van een src attribuut en vervolgens in de HTML geïnjecteerd. Deze methode is geschikt voor scripts die komen van een andere domein dan het domein van de pagina zelf.

Script defer
IE ondersteunt het DEFER attribuut bij de SCRIPT tag. Defer is een indicatie aan IE dat het gerefereerde script geen DOM wijzigingen zal uitvoeren en dat het niet meteen hoeft te worden gedownload. Dit heeft tot gevolg dat IE andere bestanden parallel met dit script zal downloaden. Het werkt echter alleen in IE en enkele nieuwe browsers.

Document.write Script tag
In deze techniek wordt net als bij de “Script DOM Element” methode een SCRIPT tag dynamisch aan de HTML toegevoegd, dit keer echter met een document.write() constructie. Het verschil is dat deze techniek alleen resulteert in het parallel downloaden van andere scripts, alle andere bestanden worden toch geblokkeerd.

Conclusie
Na het lezen van de technieken lijkt het redelijk simpel: kies altijd voor de “Script DOM Element” methode. De realiteit is echter niet zo eenvoudig. De keuze hangt af van het gewenste gedrag van de “busy indicators” in de browser (de visuele hints die aangeven dat er iets wordt gedownload) en van de wens om de download- en executievolgorde af te dwingen. Voor meer details over wanneer je nou precies wat moet kiezen verwijs ik je graag door naar hoofdstuk 4 van “Even Faster Web Sites”.

zondag 8 maart 2009

Compatibility wars: nieuwe browser wars?

Het is een tijdje redelijk rustig geweest aan het browserfront. Elke maand een procentje Firefox erbij en een procentje Internet Explorer minder in de wereldwijde gebruikersstatistieken, maar dat was het dan ook wel qua spanning. Inter Explorer 6 wil (helaas) maar niet echt doodgaan in de lijstjes, hoewel er vanuit Skandinavië dappere pogingen worden gedaan om deze jaren oude security- en stadaardhel de nek om te draaien met een "Upgrade dan tenminste naar IE7"-actie. En zoals mijn CTO Front-end-collega Koen onlangs wijs sprak: "Ik heb eigenlijk liever dat IE6 gebruikers upgraden naar IE7 dan naar Firefox, want dan kunnen ze tenminste niet meer terug!". Juist! Zo erg is het met IE6. Weg ermee dus, en upgraden, hup!


Het lijkt er echter op dat we na een relatief rustige periode weer een nieuwe "oorlog der titanen" tegemoed gaan. Google kwam met het slim gethreadde hipster-browsertje Chrome (lekker snel maar niet echt een killer app naar mijn mening), maar Apple mengt zich nu ook zeer serieus in de strijd met de nieuwe Safari. En deze fraaie Safari 4-beta is 100% ACID 3-compatible! Voor de niet-zo-browser-en-web-savvy-lezer: ACID is een testsuite voor browsers om te beoordelen hoe goed een browser zich aan de webstandaarden weet te houden. IE6 scoort bijna of-the-record aan de onderkant, maar Safari 4 beta is in staat gewoon de volle 100% te scoren. Het kan dus gewoon wél! Voor webontwikkelaars is de gedachte aan een wereld met alleen maar ACID 3-compatible browsers op het internet, als een soort ultieme Red-Shoe-Diariesdroom: alles maar één keer testen, en het werkt meteen op elke PC of Mac! Oh boy oh boy! Als dat toch eens waarheid kon gaan worden!

Enfin, intussen zit Microsoft ook niet helemaal stil (IE8 komt er aan), maar helaas komt deze lang zo ver niet als Safari in de tests. IE zet wel weer een stap (en eerlijk: dit keer best een flinke), maar een echte sprong naar compatibiliteit zoals Safari en de nieuwe Opera die maken is het niet. Firefox doet zoals verwacht braaf mee in deze vooruitgangsdrift, maar lijkt wat problemen te hebben met de nieuwe Javascript-engine. Nu is een random crash en memory leak hier en daar natuurlijk ook wel traditie voor een Firefox-betaversie.

We kunnen bij ISAAC alleen maar hopen dat al die internet hatende systeembeheerders die hun medewerkers (for hell's sake) dwingen te blijven draaien op IE6 tenminste over gaan stappen naar IE8. Maar liever nog naar Safari dus, want dat lijkt een échte browser te gaan worden.

De heren van GeenStijl.nl linkten vandaag een erg interessant artikel over de "nieuwe" browser battle die in aantocht is. Een vergelijking van negen huidige en aankomende websurfapplicaties. Het is een artikel van MaximumPC.com, en brengt je in een paar minuten up-to-date met de huidige stand-van-zake op browsegebied. Klikt allen!

Zoals David Duchovny aflevering na aflevering zei: "Dear red shoes...", let this dream become reality!

woensdag 25 februari 2009

Safari 4 public beta: benchmark time!

Today Apple released the latest version of their browser: Safari 4. It's only a public beta but with an impressive list of new features including a JavaScript engine that is 4.5 times faster than the previous Safari version, I couldn't resist: benchmark time!


For this benchmark I used the webkit SunSpider benchmark. This benchmark only tests the core JavaScript language, not the DOM or other browser APIs. Looking at the current RIA trend this makes sense: more and more of the application logic (and therefore data structure) is being run inside the browser, so core data structure manipulation will become much more important in the future.


The benchmark runs a couple of tests that consist of crypto and 3d calculations, some bit operations, string and date manipulations, recursion, and object access tests. It returns the time it took to complete each test and the sum of all the tests is the overall score. Here is an example of one of my runs on safari 4 (time in milliseconds). 


For the benchmark I used my Dell latitude D830, running Windows XP. I tested the following 5 browsers:


- The new Safari 4

- Google Chrome 1.0

- IE 7

- IE 6

- Firefox 3.0

- Opera 9.6


After running the same test 5 times in each of the browsers I found the following results (lower bar is better)




In my very non-scientific tests the new Safari 4 is just a fraction faster than Google Chrome and about 2.2 times faster than Firefox and Opera. But it's much much faster than IE6 and IE7: a whopping 13 times on my machine.


Apple itself claims to be 3 times faster than Firefox and even 30 times faster than IE7, using SunSpider and iBench as benchmarks. My findings where not this extreme, but impressive nonetheless.


I guess Google's goal to raise the bar on JavaScript performance was a success. With their dependance on fast JavaScript for all their cloud apps I guess they are the ones that will be most pleased with this new version of Safari.


Oh, and don't forget our ultimate benchmark. Yeah baby!

woensdag 28 januari 2009

Internet Explorer 8 release... en nu?

Na enige vertraging heeft Microsoft recentelijk de Release Candidate 1 uitgegeven van hun Internet Explorer 8. Deze is vanaf de website te downloaden. Hiermee zal de final release van de webbrowser niet lang meer op zich laten wachten.

De release van IE8 stond oorspronkelijk gepland voor eind 2008. Hiermee wil Microsoft inspelen op het afnemende marktaandeel. Mozilla's Firefox en nu ook Google's Chrome snoepen in vergelijking met vorig jaar veel van Microsoft's marktaandeel af.

Nieuwe Features

IE8 heeft een paar nieuwe features, zoals Web Slices en Activities. Met Web Slices kunnen gebruikers zich abonneren op pagina's of op 'points of interest', zoals news feeds of eBay veiligen. Deze pagina's kunnen dan in de gaten worden gehouden in het IE navigatiemenu.

Met Activities kunnen gebruikers rechts klikken op een webpagina, waarna ze kaarten of andere websites kunnen betrekken in die pagina.



Webstandaarden

Microsoft geeft zelf aan dat de prestaties van de browser zijn verbeterd. IE8 houdt zich ook beter aan webstandaarden. Dit klinkt natuurlijk voor de front end developers van ISAAC als muziek in de oren. De tijd die nu besteed wordt in het compatible maken van websites in IE7 en vooral IE6 is enorm. Hopelijk wordt dit hierdoor gereduceerd en dat scheelt een hoop frustratie.



Gebruikers en IE6

IE6 bestaat dit jaar in totaal 8 jaar. De browser kwam uit nog voordat de twin towers vielen. Voordat Apple zijn eerste Ipod fabriceerde en zelfs voordat Nintendo kwam met de 'gamecube'.
Toch zijn er nog steeds gebruikers die IE6 gebruiken voor hun dagelijkse surf uurtjes. De ontwikkeling van mogelijkheden op gebied van websites staat natuurlijk niet stil, hoelang kunnen we dit nog op zo'n manier tweaken dat het optimaal werkt?

Als we de mensen van ie death march mogen geloven is dat niet lang meer. Ze richten zich op "march 2009" als datum om de ondersteuning van IE6 te stoppen. Een beetje kort door de bocht naar mijn idee. Als webdeveloper dien je je te richten op het 'accessible' maken en houden van websites. Natuurlijk zou ik IE6 development heel graag willen stoppen, puur omdat je nieuwe technieken niet in een 8 jaar oude browser kan frotten. Dat is net als met je oldtimer op de duitse snelweg gaat rijden. Iedereen knalt je aan alle kanten voorbij en meegaan met de 'flow' kan je niet. En als je toch je bakkie tot het uiterste weet te drijven, krijg je kuren.

Hoe dan ook, nog steeds 1 op de 5 gebruikers gebruikt IE6, en daarvoor ben je naar mijn inziens verplicht om daarvoor ondersteuning te bieden. Vooral als vele klanten dit ook nog steeds doen.

Momenteel pakken we het zo aan dat we IE6 wel goed duidelijk en overzichtelijk maken, echter de meeste gave visuals/annimaties zullen alleen werken in IE7+, Firefox, Opera, Safari

Toch wil ik iedereen aanraden, willen jullie een beetje met de tijd meegaan..Upgraden dan! :)
Ga naar Firefox, Opera, Chrome of indien je het wil blijf bij Microsoft, maar ga in ieder geval naar IE7 of hoger.



woensdag 3 september 2008

g Cr


Incase you don't know what the above means, it's simple, first of all is the symbol for Googol (or was it Googolplex? I always mix them up), and the second for Chromium. Combing them together with some missspelling results in something now known as Google Chrome.


This is a new browser, by Google, that is ought to take away the "pain" in webbrowsing. While I can't say everything about it, having used it for a mere 30 minutes, I can tell you my first impressions of this "beast".

But first of all, let us explain why I am not writing this in Dutch, even tough it's my native language. 1. It's late. 2. I'm lazy. 3. Context Language "switching" is expensive for me. And I may do a Dutch translation if there is enough demand. A later post may include a Dutch translation by default.

Anyway, back to Google Chrome! Before anyone can complain, these are my, and my alone, first impressions. So don't bother complaining. You know who I'm refering to. ;-)

  1. For a supposedly new and innovative browser, it looks and feels remarkably like Opera, I haven't yet found a feature that isn't in Opera. With the possible exception of the multiple processes (see later) and the App mode. But the latter is a counterpart to Opera's Widget system. I suppos OmniWeb will feel similar as well, for Mac users (from what I've heard). Look and Feel also looks a lot like Opera.
  2. It's, for now, XP/Vista only.
  3. Installation was painless, just run the exe you download and say if you want to place a shortcut on the desktop/quicklaunch and if you want to import from IE or FireFox (strangely enough not Opera nor Safari), which you can't cancle after you accidently make a mistake (so I started with the RunMeFirst of IE as my homepage). One thing to note, it will plant itself into the the Local AppData of the running User (in Vista), no way to define something else. In XP this will be a similar place (ApplicationData for example).
  4. The only "innovative" feature I could find was the 1 process per tab idea. I currently have eight tabs open, with a total of ten chrome processes. So one master monitoring process, one for the actual browser "chrome" (to use a FireFox term, it's the GUI around the actual web content), which, if the rumors are right is also a webpage. And one for each tab. So I guess the actual browser window is a webpage. Thread-wise the master process currently uses 27 threads, maybe a bit excessive, not sure. Each browser window 5 threads and roughly half the memory, even less for workingset memory. Each tab process has 2 threads. I think one for the JavaScript, and one for the, required, Windows Message Pump (it's a Win32 API thing). Or maybe for the rendering, if that's done my the tab process itself. Memory-wise it's similar to a window process, basicly confirming (yeah, not very scientific, I know) that a window is a webpage.
  5. Scroll is too fast.
  6. The Mozilla Prism/Adobe Air/MS Silverlight/Opera Widget part consists of placing a shortcut in either QuickLaunch or the Desktop telling the Chrome application to start with an url, the exact url from where you chose to create an app out of a webpage. Apps open in a new window. But share the infrastructure of the other Chrome apps (which means it will launch the master Chrome app if it's not yet present). If you open a page/tab in the new App window it will open a new tab in the last used window, that is not an App window. It also means it will start 2 new processes under the Chrome master process, which makes sense because a window is a webpage and the actual app is also a webpage.
  7. It does not yet pass the Acid3 test (63%), even tough the nighlies of WebKit (which is the render engine used in Safari and most of the webbrowser-like applications found on the Mac, and on other platforms) already do for some time, and I believe the latest beta of Safari does this as well. Acid2 test also isn't yet pixel perfect (like it is on Opera ^_^), just like Safari. So I think they are currently using the WebKit (or a near) version to the one used in the latest stable Safari release.

That's it for now!
I'll might do a more indepth (and comparison with other browsers) article in the future.

--Maarten

PS.

Written from within g Cr!

PPS.

Next morning now, and I think I forgot to mention something last night. I put quotes around the word "innovative" in point 4, why did I imply sarcasm there? Well, a little language has been known to casually support tens of thousands of processes at the same time. What is the difference? Well, those processes are lightweight and use the shared nothing approach to concurrency. In fact, most processes/threads in Erlang are so called "green threads" or "fibers". In Chrome, they are spinning up real, heavy, processes. One for each tab.

But I have to admit, it is very Google in mentality (the spinning up of processes), Google's famous "MapReduce" is infact implemented to spinning up processes that do part of the job, actually they spin up entire machines for this!

dinsdag 17 juni 2008

Mozilla 3 Merge conflict


Mozilla heeft met Firefox 3 een behoorlijke verbetering geleverd op de vorige versie, minder geheugengebruik en snellere opstarttijden lossen het grootste probleem van de browser op. Maar dat neemt niet weg dat we niet nog een schop onder de gordel kunnen geven in de richting van Mozilla. Neem een kijkje naar de afbeelding, dit is de site zoals die live stond op de releasedag van Mozilla FireFox 3. Het ziet er naar uit dat er een SVN/CSV merge conflict door het net is geglipt.

donderdag 6 maart 2008

IE8 Beta1

Dicht op de hielen van het bericht dat IE8 voor webstandaarden kiest (niet te laat, echt niet, nee, ik meen het, echt zeker _niet_ te laat *zucht*).
Heeft het IE8 team de eerste Beta van IE8 gelanceerd!
Het is op de Microsoft website te downloaden, de link is op de IE8 team blog te vinden.

Hoewel dit nog niet geprobeerd is binnen ISAAC, staat het voor sommige onder ons thuis al klaar om getest te worden.

Wel is al gebleken dat er sinds een bericht van een paar maanden geleden dat IE8 de ACID2 test succesvol kon doen toch wat veranderd.
Want de eerste berichtgeving toont aan dat IE8 dit niet (meer) kan doen.

Maar, ondanks dat, is er een hoorbare zucht van vele websoftware simians* op de wereld, voor de hoop dat IE8 zich beter ontwikkeld, als was het enkel eens een keer normale support voor (oude) technologieën als CSS2.1.

We houden u op de hoogte van de ontwikkelingen!

* http://dilbert.com/comics/dilbert/archive/dilbert-20080304.html

dinsdag 4 maart 2008

Microsoft kiest voor webstandaarden

De volgende versie van Microsoft Internet Explorer (IE) zal zich veel strikter aan de webstandaarden gaan houden. Microsoft maakte dit maandag bekend gemaakt. De laatste tijd kreeg de softwaregigant veel kritiek van websitebouwers, omdat IE8 op veel punten afweek van de standaarden die bepalen hoe browsers worden weergegeven.

Deze afwijkingen zorgden ervoor dat veel ontwikkelaars problemen ondervonden bij het bouwen van een website. Het komt te vaak voor dat webpagina's in er IE heel anders uit zien dan in Internet Explorer. Toch heeft deze browser het grootste marktaandeel, waardoor de bouwers er vaak voor kiezen om hun pagina's voor deze browser te optimaliseren. Andere browsers, zoals Mozilla Firefox en Opera, houden zich veel meer aan de standaarden, maar lijken niet te werken als een website in IE correct wordt weergegeven.

Opera diende daarom in december, bij de Europese Commissie, een mededingingsklacht in tegen Microsoft. Het bedrijf is namelijk van mening dat de softwaregigant bewust van de huidige web-standaarden afwijkt, waardoor andere browsers minder aantrekkelijk worden.

De nieuwe versie van IE, die later dit jaar wordt gepresenteerd, zal de bestaande standaarden veel beter ondersteunen. In eerste instantie waren zij van plan om de browser standaard zo in te stellen, dat hij zich hetzelfde gedroeg als eerdere versies van IE. Zo zouden eventuele problemen met de weergave van verouderde websites voorkomen moeten worden.

Dit laatste leverde Microsoft echter veel kritiek op. Webontwikkelaars waren namelijk van mening dat het bedrijf de fouten uit het verleden recht moest zetten. Maandag heeft de softwaregigant laten weten de standaardintstelling voor IE8 aan te passen.