Thursday, March 17, 2011

Internet Explorer 9 Network Performance Verbeteringen

Internet Explorer 9 Network Performance Verbeteringen: "

De browser netwerk subsysteem is een essentieel onderdeel voor het leveren van een high-performance Web ervaring. In het bericht van vandaag, zal ik dit aantonen met behulp van enkele real-world metingen, waaruit blijkt dat dat zelfs in een "snelle" netwerk omgeving, het netwerk tijd in domineert de tijd andere subsystemen die tijd van invloed pagina te laden. Vervolgens zal ik een korte tutorial over hoe Web browsers gebruiken het netwerk, en een overzicht van de verbeteringen die we hebben gemaakt in Internet Explorer 9 om te helpen een snelle pagina wordt geladen garanderen.

Real-world Browser Prestaties en Netwerken

Vorig jaar hebben we geanalyseerd Top Sites om te meten hoeveel van de totale laadtijd was gerelateerd aan de tijd doorgebracht ophalen van de inhoud van de servers. We hebben de tests liep in wat wij beschouwen als een "snelle" omgeving, op een 2,4 GHz Intel Core2 draait op een 802.11n-netwerk aangesloten op een 20MB/sec kabelmodem. Voor elke iteratie van elke site, we 4 metingen van de pagina-load-tijd in beslag nam (van about: blank naar top-level document volledig) het meten van zowel PLT1 (duidelijke cache) en PLT2 (primer cache) in de "echte wereld" voorwaarden en in een "ideale" wereld waarin het netwerk de tijd was zero'd door terug te keren alle middelen direct van een proxy op de lokale computer.

De resultaten van zes representatieve locaties zijn weergegeven in de volgende reeks grafieken, een voor elke site getest. Elke ring geeft de verhouding van "non-netwerk"-tijd (rood) naar "netwerk"-tijd (blauwe). De buitenste ringen vertegenwoordigen de ratio voor de eerste pagina te laden ("clear cache"), terwijl de binnenste ring geeft de verhouding voor het tweede bezoek ("primer cache").

Grafiek van zes websites tonen hun netwerk versus niet-belasting van het netwerk tijden

Zoals u kunt zien, is er een breed scala van netwerk performance ratio's. Voor sites die een goed gebruik van caching (bijvoorbeeld die in de derde kolom), zeer weinig tijd is besteed aan het netwerk voor PLT2 omdat de overgrote meerderheid van de inhoud wordt lokaal opgeslagen in de cache van de browser te maken. Voor andere sites, terwijl de totale laadtijd in PLT2 is veel sneller dan PLT1, netwerk tijd vertegenwoordigt nog steeds de grootste component van de pagina laadtijd, want zelfs een verzoek van het netwerk duurt relatief lang.

Deze bevindingen tonen aan dat zelfs in een "snelle" netwerk omgeving, het netwerk de tijd de laadtijd van pagina domineert. Op de eerste pagina te laden, downloads goed voor 73% van de tijd die nodig is om de pagina te laden; op een latere herladen, 63% van de laadtijd van pagina verloren gaat door wachten voor de middelen.

Grafiek toont de totale netwerk versus niet-belasting van het netwerk tijden

Anders gezegd, deze set van sites aanvankelijk geladen in een totaal van 17 seconden, hetgeen zou neerkomen op 4,6 seconden worden teruggebracht als het niet voor download tijd. Op herladen, de sites geladen in 6,7 seconden, hetgeen zou neerkomen op 2,5 seconden worden verminderd zonder download tijd.

Nu hebben we gekeken naar de "echte wereld" impact van het netwerk van de prestaties, laten we onderzoeken de bronnen van het netwerk te vertragen.

Browser Networking 101: waar de knelpunten zijn

Elke keer als uw browser laadt een website, een ingewikkelde reeks stappen gebeurt achter de schermen. Een korte samenvatting van deze stappen volgt:

Als uw computer niet actief is achter een web-proxy, dan is uw browser gebruikt het netwerk om het uitvoeren van een DNS lookup om de hostnaam die u hebt (bijvoorbeeld www.microsoft.com) ingevoerd in het netwerk adres (bijvoorbeeld 65.55.12.249) om te zetten. De browser moet vervolgens een TCP / IP-netwerk verbinding met het doeladres.

Als uw computer draait achter een webproxy, browser moet je eerste vinden de proxy. De proxy kan direct worden opgegeven binnen de instellingen van je browser, of zich via een proces genaamd Web Proxy Auto-Discovery Protocol ( WPAD ). Na de hostnaam van de proxy wordt bepaald, de browser maakt gebruik van een DNS lookup om de proxy hostnaam om te zetten in een netwerk adres. De browser wordt dan een netwerk verbinding met de proxyserver.

Als de URL vraagt ​​om een ​​beveiligde verbinding (https) dan een SSL of TLS-handshake moet plaatsvinden, en de certificaten van de server moet worden gecontroleerd. Dit kan resulteren in een of meer extra netwerk verzoeken om Certificate Authorities (de zogenaamde "Intrekking controles") om dat geen van de certificaten in de keten zijn ingetrokken te waarborgen.

Nadat de verbinding tot stand is gebracht, moet de browser stuurt een HTTP-verzoek naar de server. De server, na ontvangst van de aanvraag moet laden (of het genereren van) de gevraagde bestand en dit overbrengen naar de klant beginnen. Als het document is een HTML-bestand, zal het meestal verwijzingen bevatten naar andere middelen (bijvoorbeeld plaatjes, scripts, stylesheets), dat eveneens moet worden geladen om volledig weer te geven op de webpagina. Voor elke resource waarnaar wordt verwezen door de pagina, moet de browser meestal herhalen veel van de vorige stappen om het downloaden van de benodigde middelen.

Veel van deze activiteiten moet serieel worden uitgevoerd (bijvoorbeeld, je kunt niet een TCP / IP-verbinding zonder eerst het verkrijgen van het IP-adres met behulp van een DNS-lookup) en dus vertragingen in een bepaalde operatie kan drastisch verhogen de laadtijd van de pagina.

In sommige gevallen, kunnen operaties worden parallelized of caches kunnen worden ingevoerd om het risico van vertraging te beperken. Internet Explorer 9 maakt gebruik van beide technieken voor verbeterde prestaties, zoals ik zal uitleggen in de rest van dit bericht.

Sneller Netwerken door middel van DNS-Pre-resolutie

De Domain Name System ( DNS ) kan de klant browser hostname converteren van een in een netwerk-adres. Dit proces kan tussen een paar milliseconden tot enkele seconden; een recente studie schat de Amerikaanse mediane op ongeveer 150ms, hoewel er grote variantie. Omdat de browser kan pas beginnen de oprichting van een netwerkverbinding na het bepalen van het externe adres, DNS is het eerste knelpunt in het netwerk van de prestaties.

Internet Explorer 9 bevat drie optimalisaties voor een betere DNS-prestaties; al deze optimalisaties zijn gebaseerd op het feit dat meerdere DNS-verzoeken kunnen worden afgegeven in parallel.

Adresbalk DNS Pre-resolutie

Na de derde teken dat u typt in de adresbalk, zal Internet Explorer probleem DNS-resoluties voor de top 5 van hostnamen in de dropdown. De resultaten van deze resoluties worden opgeslagen in het lokale besturingssysteem cache voor snelle hergebruik in de toekomst. Op deze manier, als u vervolgens navigeren naar een van deze topwedstrijden, zal de browser een kleine voorsprong en zal minder tijd te besteden wachten op DNS-resultaten worden geretourneerd.

Speculatieve Pre-resolutie voor bezochte sites

Wanneer u een pagina bezoekt, zal Internet Explorer 9 annoteren de pagina de geschiedenis van binnenkomst met de lijst van hostnamen die werden gecontacteerd om de inhoud wordt gebruikt door de pagina te downloaden.

Bijvoorbeeld, wanneer het laden van de IEBlog, de HTML-verwijzingen middelen uit vijf andere sites (i.msdn.microsoft.com, cdn-smooth.ms-studiosmedia.com, go.microsoft.com, ieblog.members.winisp.net en silverlight.dlservice.microsoft.com).

Internet Explorer 9 winkels deze vijf hostnamen in de geschiedenis vermelding voor de IEBlog site. Als u begint met de IEBlog te navigeren in een toekomstige browser sessie, zal Internet Explorer onmiddellijk af DNS-resoluties aanvragen voor deze vijf opgeslagen hostnamen, parallel met de totstandbrenging van een verbinding met de blogs.msdn.com server. Dit helpt ervoor te zorgen dat wanneer de blog HTML wordt vervolgens terug van de server, de lokale DNS-cache zal typisch bevatten al het netwerk-adressen die nodig zijn om de pagina's embedded resources te downloaden.

Pagina geïnitieerde Pre-resolutie

Internet Explorer zal ook het oplossen van eventuele hostnamen voor een oplossing die zijn opgegeven door de Web ontwikkelaar in een link rel = Prefetch element. Bijvoorbeeld met de volgende opmaak:

<link rel="prefetch" href="http://www.example.com/someresource.htm">

... Internet Explorer zal kick-off van een DNS-resolutie voor www.example.com. Op die manier, als er een verbinding later wordt verwezen naar www.example.com, zal de DNS-resolutie al hebben plaatsgevonden en de browser kan direct verbinding met de server, zonder te pauzeren op te zoeken zijn adres.

Sneller Netwerken via proxy Verbeteringen

Veel zakelijke gebruikers zijn geconfigureerd om het web te surfen met behulp van proxy servers, en proxies kan een netwerk performance impact hebben. Te dien einde, hebben we twee belangrijke wijzigingen om de prestaties te verbeteren in een omgeving die een proxy vereist.

De eerste plaats, heeft Internet Explorer verplaatst haar proxy vastbesloten logica van het tabblad processen naar de eengemaakte frame proces. Dit helpt ervoor te zorgen dat wanneer de Web Proxy Auto-Discovery ( WPAD ) functie loopt (en het kan milliseconden te nemen van tientallen tot meerdere seconden) het alleen doet eenmaal per browsersessie, ongeacht hoeveel browser tabbladen die u geopend. Dit bespaart ook enkele CPU-tijd en bijna 500kb geheugen per tabblad proces. De proxy bepaling verbetering kan aanzienlijk verbeteren van de prestaties van het starten van een nieuwe browser-tab en het laden van een site in.

Ten tweede, Internet Explorer 9 verhoogt de verbindingen-per-proxy te beperken tot 12. Hierdoor kan de browser meer downloads uit te voeren in parallel ten opzichte van IE8, die een zes-verbinding limieten die gelden bij het gebruik van een webproxy. Hoewel de browser verbindingen per host limiet blijft 6, Veel sites gebruiken de middelen van meerdere domeinen en dus profiteren van de hogere verbindingen per-proxy te beperken.

Sneller Netwerken door middel van parallelisme

Zoals vermeld in de DNS-Pre-resolutie sectie, doen meer werk in parallel is een geweldige manier om de algehele prestaties te verbeteren. Sommige van het netwerk van de browser operaties zijn niet inherent sequentiële en tijd kan worden bespaard door het doen van het werk in meerdere threads tegelijk.

Zo merkten we dat vrijwel alle sites belanden die meer dan een HTTP-verbinding per hostname, en de tijd kan worden bespaard als we het openen van een tweede "achtergrond" aansluiting bij de vaststelling van de eerste verbinding. Deze achtergrond verbinding is beschikbaar voor de volgende HTTP-verzoek zonder te forceren om te wachten totdat de oorspronkelijke verbinding beschikbaar komt, en zonder de vertraging van de opening van een nieuwe verbinding in een "just in time" manier. Slechts een achtergrond verbinding is geopend per host, en deze verbetering kan tientallen op te slaan honderden milliseconden bij het laden van een pagina.

Vervolgens hebben we gemerkt dat in sommige gevallen hebben we een blokkerende gedrag in onze verbinding afhandeling had, waarbij er meerdere (bijv. 3) open verbinding naar een server, maar openen van een andere verbinding met de server (# 4) werd uitgesteld tot een voorafgaand verzoek had voltooid, hoewel de verbindingen per host limiet van 6 konden we een nieuwe verbinding open meteen. We hebben verwijderd dat het blokkeren van gedrag en mag meer werk te eindigen in parallel.

Ten slotte hebben we geconstateerd dat we konden de browser toestaan ​​om te netwerken krijg download verzoeken om beelden uit op het sneller doordat de lookahead downloader de aftrap voor image-bestand te downloaden. Ter ondersteuning van de HTML5 specificatie, wij ook getweaked het beeld download code om te voorkomen dat beelden met een lege bron (bijvoorbeeld <img src="" />) uit het maken van een verzoek van het netwerk.

Sneller Netwerken via het cachegeheugen Verbeteringen

Natuurlijk, de meest effectieve manier om grote prestaties van het netwerk te waarborgen, is het netwerk de tijd volledig wegwerken. Het Temporary Internet Files cache maakt IE van eerder gedownloade content hergebruiken zonder opnieuw te downloaden van de content via het netwerk. Afgelopen zomer heb ik samengevat een aantal caching-gerelateerde verbeteringen in IE9 die browser helpen beter gebruik te maken van de cache. Vandaag, zal ik voortbouwen op dat bericht door het uitleggen van de andere werk dat we hebben gedaan om de functionaliteit van de cache te vergroten.

Cachegrootte

Internet Explorer 6, 7 en 8 beperkt de webinhoud cache grootte van 1 / 32 van de schijfcapaciteit standaard, in IE7 en IE8, is de standaard capaciteit waarde afgetopt 50 megabyte. Vrijwel alle harde schijven in gebruik zijn groter dan 1,6 gigabyte, wat betekent dat bijna alle gebruikers van IE7 en IE8 browsen met een gehalte cache beperkt tot 50MB.

Internet Explorer 7 is standaard 50MB cache werd ingevoerd omdat de analyse in de Windows Vista termijn bleek dat de browser's cache-hit-ratio niet significant verbeterd met caches groter dan die grootte. Dan verbruikt meer schijfruimte, grotere caches langer duren om op te noemen en duidelijk (bijvoorbeeld bij het uitvoeren van de Delete-Browser Geschiedenis werking). Daarom een ​​belangrijk design strategie is om alleen maar toenemen de cache grootte wanneer een verbeterde hit rate zal leiden.

In IE9, namen we een veel dichter kijkje op onze cache gedrag beter te begrijpen onze verrassende bevinding dat grotere caches zelden werden onze hit rate te verbeteren. We vonden een aantal functionele problemen gerelateerd aan wat IE behandelt als cachen en hoe de cache cleanup algoritme werkt. Na de vaststelling van deze kwesties, vonden we grotere cache maten waren wat weer resulteert in een betere hit tarieven, en als gevolg daarvan, hebben we veranderden onze standaardcachegrootte algoritme om een ​​grotere standaard cache bieden.

Internet Explorer 9 heeft een standaardcachegrootte limiet van 1/256th van de totale schijfcapaciteit, met een cap op de standaard tot 250 megabytes. De nieuwe verhouding werd gekozen om te zorgen dat low-end netbooks met kleine solid state schijven worden niet beïnvloed door (relatief) grote caches te waarborgen, terwijl de desktops met grote schijven wordt standaard een 500% grotere cache vs IE8. Een schijf zo klein als 16GB zal resulteren in verhoging van de standaard cache grootte tussen IE8 (50MB) en IE9 (64MB). Elke schijf groter dan 64GB zal bereiken de standaard dop van 250MB. In alle versies van Internet Explorer, kunt u handmatig aanpassen van de cache grootte (binnen het bereik van 8 MB tot 1 GB) met behulp van het menu Extra> Internet Opties> Algemeen> Browsegeschiedenis Instellingen dialoogvenster.

Als uw Temporary Internet Files worden opgeslagen op een hoge capaciteit schijf met veel vrije ruimte, kan je je afvragen als je zou baat hebben bij het configureren van een nog grotere cache. Het is zeker mogelijk, maar onze analyse blijkt dat het verhogen van de grens waarboven 250mb alleen resulteert in voordelen voor sommige zoekpatronen. Belangrijker nog is dat de caching systeem intern beperkt tot de opslag van ongeveer 60.000 objecten. Afhankelijk van de grootte van het cachegeheugen en de omvang van de middelen die u downloadt, kunt u het object telling limiet tegenkomen voordat ontmoeting van de omvang te beperken.

Technische noot: Internet Explorer onderhoudt twee caches, een voor inhoud die wordt gebruikt in de beveiligde modus (Internet en beperkingsgebieden "genoemd) en een voor inhoud die wordt gebruikt buiten de beveiligde modus (intranet, Vertrouwde en lokale computer zones). Elke cache is individueel afgetopt op de limiet, zodat de totale maximale schijfruimte die wordt verbruikt door caches is het dubbele van het individu te beperken.

Cache Cleanup

Zoals vermeld in de vorige paragraaf, algoritmen onze analyse van de cache cleanup gebruikt in IE8 en hieronder aangegeven aanzienlijke ruimte voor verbetering. Als gevolg van deze analyse hebben we aanzienlijk herschreven de cache scavenger (die verwijdert lage waarde aantekeningen vrij te maken cache ruimte) voor Internet Explorer 9. De nieuwe scavenger is aanzienlijk meer kans om waardevolle items te behouden (die cachevermeldingen die waarschijnlijk opnieuw worden gebruikt) door afdanking van minder waardevolle items.

Internet Explorer cache aaseter is begonnen als de cache te beperken (grootte of object te tellen) wordt benaderd. Het doel is om de minst waardevolle 10% te verwijderen (naar grootte) van de objecten in de cache. Het doet dit door het opsommen van de objecten in de cache. In de eerste pass, het kent elk een score tussen 0 en 66.000. In de tweede doorgang, verwijdert de gegevens die zijn gerangschikt in de laagste 10% van de scores.

In IE9, hebben we aanzienlijke wijzigingen aangebracht in de wijze waarop de scores zijn berekend om beter ervoor te zorgen dat de meest waardevolle inzendingen worden gehouden en de minst waardevolle items zijn verwijderd.

Van de 66.000 mogelijke punten, zijn 40.000 punten bepaald door hoe recent een bepaalde bron werd gebruikt. 20.000 punten vloeien voort uit hoe vaak de bron is gebruikt, en 6000 punten vloeien voort uit de aanwezigheid van validator informatie (HTTP response headers zoals Last-Modified en ETAG) die voorwaardelijke revalidatie van middelen mogelijk na hun versheid afloopt.

We nemen ook de MIME-type van de bron wordt gehouden; script, CSS en HTML / XHTML middelen krijgt een volledige krediet, terwijl andere typen bronnen (bijvoorbeeld afbeeldingen, audio, etc) krijgen slechts de helft van de hun toegewezen punten. Dit helpt ervoor te zorgen dat de middelen die de grootste impact op pagina laadtijd hebben in de cache te overleven langer dan een lagere prioriteit middelen.

Cachevermeldingen die zijn meer dan eens gebruikt ontvangt een toenemend aantal van hergebruik punten; naar meer dan 10.000 punten te krijgen, moet de bron zijn hergebruikt over een langere periode dan 12 uur. Dit helpt voorkomen dat de middelen die vaak werden hergebruikt, maar slechts binnen een korte periode (bijvoorbeeld wanneer u surfen rond een site die u bezoekt zelden bent) van het krijgen van hetzelfde bedrag van het krediet als een hulpbron die vaak wordt hergebruikt over een lange periode (bijvoorbeeld een script op een site die u bezoekt elke dag).

Items die validators zijn te verzamelen validator punten, maar de grootste impact van de validators zich voordoet na de middelen niet meer vers. Alle middelen die zijn verstreken en bevatten geen validators ontvangt een score van 0 punten (omdat zij niet kan worden hergebruikt of herbevestigd), terwijl die met validators 70% van hun score te behouden. Vervallen middelen met validators behouden de meeste van hun score, omdat ze de browser toestaan ​​om snel controleer de frisheid van een cache bron - de server kan antwoorden met een kleine HTTP/304 respons (zonder lichaam) waaruit blijkt dat de kopie in het cachegeheugen kan worden hergebruikt.

De aaseter is ook gevoelig voor een aantal bijzondere gevallen-bijvoorbeeld geen middelen zullen worden weggevangen voor de eerste 10 minuten nadat het was gedownload, en middelen die de cache grootte (bijvoorbeeld het downloaden van een 4GB-ISO-bestand) dan zijn tijdelijk vrijgesteld van scavenging toe te staan ​​de download met succes te voltooien.

Sneller Netwerken via Content Filtering

Internet Explorer 9 bevat ook nieuwe Tracking bescherming en ActiveX-filtering functies. Beide functies kunnen verbeteren van uw algehele prestaties browser te downloaden door te voorkomen en de uitvoering van ongewenste inhoud. Bijvoorbeeld bij het laden van de homepage van een populaire nieuwssite, waardoor de ActiveX-filter en een populaire Tracking Bescherming lijst resulteert in een aanzienlijk sneller laden van de pagina:

HTTP-verzoek Graaf Gezonden bytes Bytes ontvangen Laadtijd
Filtering met een handicap 168 98.5k 1,9 M 7.5s
Filtering ingeschakeld 138 71.7k 1,6 M 3.6s

De laadtijd van pagina wordt verbeterd door meer dan 50%, omdat de browser in staat is om te voorkomen dat het downloaden en uitvoeren inhoud die niet cruciaal is voor de weergave van de pagina.

Conclusies

Zoals u kunt zien, hebben we genomen zeer brede aanpak ter verbetering van Internet Explorer prestaties van het netwerk, ter ondersteuning van onze technische doel van het bouwen van de 's werelds snelste browser. Natuurlijk, de snelheid van uw eigen netwerk verbinding blijft een belangrijke factor in de vergelijking, en Webontwikkelaars moeten blijven volgen beste praktijken voor de prestaties , maar IE9 de investering in het netwerk van de prestaties helpt ons de tijd levert een aanzienlijk snellere pagina te laden in een breed scala aan pagina's.

-Eric Lawrence

"

No comments: