Zo optimaliseer je de snelheid van je website - deel 2 - Webpagina's optimaliseren

Zo optimaliseer je de snelheid van je website - deel 2 - Webpagina's optimaliseren

 

10-08-2021 - In deel 2 van deze 3-delige artikelreeks helpen we om webpagina's te optimaliseren. Of je nu een website, een e-shop of een online toepassing op het internet hebt, de snelheid ervan is een belangrijke factor in de gebruikservaring en het succes.

Een snelle website zorgt voor gelukkige lezers, klanten en gebruikers. Waar tot enkele jaren geleden de vuistregel was dat een webpagina binnen 3 seconden moest laden, zijn internetgebruikers intussen een stuk veeleisender geworden. En dat is direct ook zichtbaar in de resultaten van een webshop: iedere halve seconde dat een webpagina sneller inlaadt zorgt voor significant meer sales en meer tevreden bezoekers.

Een bijkomende reden om kritisch naar de laadsnelheid te kijken is de update die Google van zijn zoekmachine uitrolt sinds mei van dit jaar: de Page Experience Update. Die aanpassing draait vooral rond de snelheid en gebruikservaring : de core web vitals. Websites die goed scoren op die parameters zullen extra beloond worden met een goede positie in de zoekresultaten. Daarnaast wordt in de update van het zoekalgoritme ook meer aandacht gegeven aan mobiele websites, veilige websites en websites met https. Websites met opdringerige advertenties worden afgestraft.

In dit tweede artikel gaan we verder in op wat je kan doen om op de webpagina’s zelf om die sneller te maken.

 

Minimaliseer de HTML structuur

De HTML structuur of Document Object Model (DOM) heeft een grote impact op de tijd die nodig is om een webpagina te tonen in een browser. Algemeen kan je stellen dat hoe kleiner de resulterende HTML is, hoe sneller de webpagina zal tonen. Dat kan je bekomen door het aantal HTML elementen te beperken.

<div id="navigatie">
  <ul>
    <li>menu item 1</li>
    ....
  </ul>
</div>
<ul id="navigatie">
  <li>menu item 1</li>
  ....
</ul>

 

Een tweede mogelijkheid is het beperken van de HTML diepte. Probeer de HTML zo plat mogelijk te houden.

<ul clas="nav">
  <li><a href="/">home</a></li>
  <li><a href="/p1.html">item 1</a></li>
  ....
</ul>
<a href="/" class="nav">home</a>
<a href="/p1.html" class="nav">item 1</a>
....

 

Comprimeer foto’s

Mooi gestyleerde, grote schermvullende foto’s maken je website stijlvol en brengen je product of dienst perfect in beeld. Die afbeeldingen hebben echter een grote impact op de laadsnelheid. Door foto’s te comprimeren kan de bestandsgrootte drastisch beperkt worden. Er zijn verschillende compressiemogelijkheden die lossless werken, maar je kan ook experimenteren met nog sterkere compressie waar er een deel details van foto’s verdwijnen. In vele gevallen zien de meeste gebruikers het verschil niet, maar zullen ze wel aangenaam verrast zijn van de sneller ladende foto’s.

brussel - weinig compressie
166 kB - weinig compressie
brussel - gecomprimeerd
16 kB - 60% compressie

 

Het comprimeren van foto’s kan je doen aan de hand van een grafisch programma, maar online zijn er heel wat diensten beschikbaar waarmee je heel eenvoudig online afbeeldingen kan verkleinen, zonder zelf software te installeren.

 

Gebruik WebP-afbeeldingen

WebP is een bestandsformaat, ontwikkeld door Google, dat nog betere compressie toelaat dan de traditionele jpg en png bestanden. In vele gevallen zijn WebP bestanden 20% (lossless compressie) tot 40% (lossy compressie) kleiner dan hun tradionele tegenhanger.

Het converteren van afbeeldingen naar het WebP formaat kan vaak rechtstreeks een Content Management Systeem, via een grafisch programma of via een online tool (bijv. https://www.imagecompressonline.com/webp)

Het belangrijkste nadeel van WebP is dat Safari heeft geen ondersteuning voor WebP. Omdat Safari een marktaandeel heeft van bijna 20%, kan je niet anders dan ook de afbeeldingen op te slaan in jpg of png formaat. Dat kan je doen op 2 manieren:

 

<picture> methode

Met deze methode laat je de internetbrowser zelf het gepaste formaat “kiezen” door middel van een HTML5 picture tag :

<picture>
  <source srcset="img/mijnafbeeldinginwebp.webp" type="image/webp">
  <img src="img/mijnafbeeldinginjpg.jpg">
</picture>

 

.htaccess-methode (enkel apache-webserver)

Met deze methode zal de webserver bepalen aan de hand van de http-headers of de browser ondersteuning heeft voor het WebP-formaat. Door deze code in je .htaccess bestand te plaatsen, worden alle jpg, png en gif-afbeeldingen automatisch vervangen door WebP afbeeldingen indien de browser dit ondersteunt. Zorg ervoor dat de beide versies van de afbeeldingen in dezelfde servermap zitten.

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Check if browser supports WebP images
    RewriteCond %{HTTP_ACCEPT} image/webp

    # Check if WebP replacement image exists
    RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

    # Serve WebP image instead
    RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=REQUEST_image]
</IfModule>
<IfModule mod_headers.c>
    # Vary: Accept for all the requests to jpeg and png
    Header append Vary Accept env=REQUEST_image
</IfModule>
<IfModule mod_mime.c>
    AddType image/webp .webp
</IfModule>
Bron : Vincentorback

Let op: de .htaccess-methode kan je niet gebruiken als je een caching methode gebruikt als Varnish of een CDN als Cloudflare.

 

Zet afbeeldingen om naar SVG

De meeste afbeelding op het internet zijn rastergebaseerd. Ze zijn opgebouwd uit kleine puntjes. SVG is een bestandsformaat voor een vectorafbeelding die is opgebouwd uit lijnen en vlakken. Het meest voor de hand liggende voordeel is dat het onbeperkt vergroot of verkleind worden zonder kwaliteitsverlies. Zo kan je één afbeelding met verschillende groottes gebruiken. Daarbij heb je altijd haarscherpe tekeningen en afbeeldingen, onafhankelijk van de grootte waarin ze getoond worden. Dat maakt het bijzonder geschikt voor logo’s en schema’s en tekeningen.

 

verschil tussen raster en vector

 

Een bijkomend voordeel is dat vectorgebaseerde afbeeldingen vaak een veel kleiner bestand hebben, dat goed gecomprimeerd kan worden.

Het beste resultaat krijg je als een bestand gemaakt wordt vanuit je grafische toepassing, maar online staan er ook conversie programma’s waarmee je in 2 kliks een bestaande afbeelding kan omzetten naar het svg-formaat:

  • https://convertio.co/nl/jpg-svg/
  • https://image.online-convert.com/convert-to-svg
  •  

    Gebruik (native) LazyLoading

    De meeste webpagina’s bevatten content en afbeeldingen die niet direct zichtbaar zijn als je de pagina inlaadt omdat de webpagina's veel langer zijn dan het scherm. Bij LazyLoading worden die afbeeldingen pas ingeladen als ze zichtbaar worden voor de gebruiker.

    Waar LazyLoading voorheen werd geregeld door een javascript, bieden de meeste browsers standaard ondersteuning voor extra attributes die lazyloading toelaten.

    Syntax:
        <img src="logo.jpg" loading="lazy" />
        <iframe src=https://cloudstar.be/ loading="lazy"></iframe>

    Ook hier is Safari de spelbreker omdat het (nog) geen ondersteuning geeft aan native LazyLoading.

     

    Verwijder ongebruikte CSS

    De meeste website worden gebouwd op basis van frameworks als Bootstrap, Foundation of Pure. Hoewel die frameworks toelaten om zeer snel websites te ontwikkelen, bevatten de CSS-bestanden heel wat extra code die niet noodzakelijk wordt gebruikt in jouw website. Zo wordt vaak 50%-80% van de meegestuurde CSS-codes niet gebruikt. Dat is nefast voor de laadtijd en het tonen van de webpagina’s.

    Met een tool als unused-css.com kan je zeer eenvoudig de ongebruikte CSS-code verwijderen. De tool scant je website en levert de geoptimaliseerde css-bestanden aan.

     

    unused-css.com

     

    Criticalcss.com is een andere tool die detecteert welke CSS-code kritisch is voor je webpagina. Die CSS-code plaats je dan binnen de HTML van je webpagina. Zo moet er niet gewacht worden met het weergeven van je webpagina tot alle css-bestanden zijn geladen.

     

    Verklein HTML, CSS en javascript

    HTML, CSS en javascript bevatten heel wat extra, onnodige karakters. Door onnodige spaties, commentaar en linebreaks te verwijderen kan je bestanden tot 15% kleiner maken. Dat heeft verschillende voordelen. De bestanden laden sneller, nemen minder geheugen in beslag en kunnen sneller geparsed worden in de browser.

    De meeste Content Management Systemen hebben plug-ins of hebben standaard ingebouwde minify-functies.

     

    Preload externe content

    In je website kan je aan de browser hints geven welke kritische bestanden je later zal gebruiken. Die bestanden kunnen vooraf al ingeladen worden, zodat de pagina’s sneller getoond kunnen worden.

    Er zijn verschillende hints die je kan meegeven :

    • dns-prefetch: forceert de internetbrowser om een dns opzoeking te doen voor een hostnaam.
      Syntax:
          <link rel="dns-prefetch" href="//www.cloudstar.be">
    • preconnect: gaat nog een stapje verder van dns-prefetch en zet ook de verbinding met de webserver op met TLS negiciatie en TCP handshake.
      Syntax:
          <link rel="preconnect" href="https://www.cloudstar.be">
    • preload: download met hoge prioriteit een bestand zoals een script of een stylesheet, en houd het in cache. De bestanden worden nog niet uitgevoerd, maar zijn wel al aanwezig op de computer.
      Syntax:
          <link rel="preload" href="/style.css" as="style" />
    • prefetch: doet hetzelfde als preload, maar met lage prioriteit.
      Syntax:
          <link rel="prefetch" href="/style.css" as="style" />

     

    Display swap voor fonts

    Een browser wacht met het tonen van tekst tot de lettertypes zijn ingeladen. Dat klinkt logisch. Het wil ook zeggen dat gebruikers met een trage internetverbinding of wanneer er een probleem is met het inladen van de fonts, de pagina lege stukken zal tonen voor een paar seconden.

    Met de font-display-functie in CSS kan je de browser aangeven dat er een standaard lettertype kan gebruikt worden en pas later – nadat het font is ingeladen – het correcte lettertype zal getoond worden.

    Syntax:
        font-display: swap;

     

    Laad javascripts asynchroon

    Javascripts brengen interactiviteit op een webpagina en zorgen – als het slim is ingezet – voor een goede user experience. Denk maar aan de integratie met een chat toepassing of het ophalen van extra informatie waarbij niet de hele webpagina ververst.

    Het inladen van javascripts kan echter het tonen van een webpagina vertragen. De HTML-code van een webpagina wordt sequentieel uitgevoerd. Komt de browser op een instructie om de javascript in te laden, dan zal de browser het renderproces blokkeren tot het script is ingeladen en uitgevoerd. Dat kan voor grote scripts een serieuze vertraging betekenen.

    Zet daarom javascript niet in de HEAD van de pagina, maar verplaats het helemaal onderaan de pagina in de BODY.

    Je kan de browser ook instructies geven over wanneer die moet starten bij het uitvoeren van het script.

    • Async: Bij async zal de browser het script asynchroon inladen en zodra het is ingeladen beginnen met uitvoeren. Bij het uitvoeren van het script wordt het tonen van de pagina tijdelijk geblokkeerd.
      Syntax:
          <script async src="script.js">
    • defer: Bij defer zal de browser het script asynchoon inladen en pas nadat de hele pagina is getoond beginnen met het uitvoeren van het script.
      Syntax:
          <script defer src="script.js">

    In de meeste gevallen is defer de beste optie.

    Tip: Wees kritisch welke scripts je toevoegt op je webpagina’s. Vaak kan je met eenvoudige “hacks” ervoor zorgen dat je geen zware externe scripts moet inladen (op iedere pagina). Een voorbeeld is een video-player. In plaats van de video-player direct in te laden kan je een screenshot tonen. Pas als er op de screenshot wordt geklikt laadt je het script om de video-player te embedden.

     

    Caching in de browser

    Het tijdelijk bewaren van bestanden in de browser zorgt voor een enorme performantieboost omdat de bestanden niet meer over het internet worden ingeladen. Als webdesigner bepaal je zelf hoelang een bestand in de cache van de browser wordt gehouden. In vele gevallen zijn afbeeldingen, fonts, javascripts en CSS-bestanden gedurende lange tijd onveranderd. Daarom kan je ze zonder problemen 1 jaar in de cache laten.

    Voorbeeld:
    In dit voorbeeld worden alle bestanden gedurende 1 jaar gecached met uitzondering van pagina's in HTML-formaat.

    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType text/html "access 1 day"
        ExpiresDefault "access 1 year"
    </IfModule>

    Tip: Wil je toch de browser forceren om een nieuwe versie van een bestand op te halen van de webserver? Dan kan je in de querystring een versienummer opgeven, zoals https://www.cloudstar.be/css/app.css?v=11

     

    Specifier een hoogte en breedte van afbeeldingen

    Waar voorheen het opgeven van hoogte en breedte van afbeeldingen in HTML heel normaal was, raakte dit in onbruik door responsive websites. De grootte van de afbeeldingen wordt bepaald en berekend in een CSS-bestand.

    Toch wordt door de web core vitals de hoogte en breedte van afbeeldingen meegeven in HTML opnieuw noodzakelijk.

    Ook voor responsive websites kan je via de picture-tag de hoogte en breedte speciferen in HTML voor verschillende scherm-groottes:

    <picture>
        <source width="600" height="400" srcset="medium.jpg" media="(min-width: 720px)" />
        <source width="900" height="600" srcset="large.jpg" media="(min-width: 1200px)" />
    </picture>

     

    Werk met een afzonderlijke mobiele website versie

    Responsive websites laten toe om één website te tonen op verschillende schermformaten. Een alternatief hierop is het maken van een speciale, geoptimaliseerde versie voor een mobiel toestel, ook wel adaptive design genoemd. Door het maken van 2 versies kan je de templates, CSS en afbeeldingen optimaliseren voor een schermformaat.

    Hoewel je met adaptive design de laadsnelheid kan verbeteren, is een adaptive design website veel moeilijker te bouwen. Content Management Systemen hebben meestal geen ondersteuning voor meerdere versies.

     

    Lees in het volgende deel hoe je de performantie van je webpagina's effectief kan verbeteren door de server en de hosting te optimaliseren.

Schrijf je in voor onze nieuwsbrief

Ontvang je graag nieuwsberichten als dit? Schrijf dan in op onze kwartaalnieuwsbrief.
Krijg je 'm liever niet meer? Afmelden kan net zo eenvoudig als aanmelden.