De kracht van moderne webervaringen met progressive web apps

Afbeelding De kracht van moderne webervaringen met progressive web apps

Progressive Web Apps, of PWA’s, zijn moderne webapplicaties die eruitzien en aanvoelen als native apps op je telefoon of tablet. Ze combineren het beste van websites en mobiele apps: je hoeft ze niet te installeren via een app-store, ze laden snel, werken ook offline en kunnen push-meldingen tonen. In dit artikel leggen we stap voor stap uit wat PWA’s zijn, waarom ze handig zijn, en geven we eenvoudige codevoorbeelden waarmee je zelf aan de slag kunt.

Wat maakt een webapp een PWA?

Een gewone website laadt pas wanneer er een internetverbinding is en biedt weinig mogelijkheden om offline te werken of meldingen te tonen. Een PWA voegt drie belangrijke elementen toe. Ten eerste is er een manifestbestand dat beschrijft hoe je app op het startscherm moet verschijnen, met icoon en naam. Ten tweede is er een service worker, een stukje JavaScript dat in de achtergrond draait en content in de cache bewaart zodat je app ook zonder internet werkt. Ten derde serveer je de pagina’s via HTTPS, wat ervoor zorgt dat de gegevens veilig tussen gebruiker en server gaan.

Het manifestbestand

Het manifest is een klein JSON-bestand dat je in de root van je project plaatst. Het bevat eigenschappen zoals de naam, icoon en de kleur van de statusbalk. Dit bestand vertelt je browser: “Dit is een app die je kunt installeren op je startscherm.”

{
    "name": "Mijn PWA Voorbeeld",
    "short_name": "MijnPWA",
    "start_url": "/index.html",
    "display": "standalone",
    "background_color": "#ffffff",
    "theme_color": "#2c3e50",
    "icons": [
        {
            "src": "/icons/icon-192.png",
            "sizes": "192x192",
            "type": "image/png"
        },
        {
            "src": "/icons/icon-512.png",
            "sizes": "512x512",
            "type": "image/png"
        }
    ]
}

Na het aanmaken van manifest.json link je ernaar in je HTML-header:

<link rel="manifest" href="/manifest.json">

Registreren van de service worker

De service worker is een JavaScript-bestand dat in de browser werkt als een proxy tussen netwerk en cache. Het stelt je in staat om pagina’s en bestanden offline beschikbaar te maken.

In je hoofdscript, bijvoorbeeld app.js, registreer je de service worker zo:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
        navigator.serviceWorker.register('/sw.js').then(function(reg) {
            console.log('Service worker geregistreerd.', reg);
        }).catch(function(err) {
            console.log('Service worker registratie mislukt:', err);
        });
    });
}

De service worker zelf

In sw.js definieer je welke bestanden je wilt cachen en hoe je ze serveert. Het simpelste voorbeeld ziet er zo uit:

const CACHE_NAME = 'pwa-cache-v1';
const urlsToCache = [
    '/',
    '/index.html',
    '/styles.css',
    '/app.js',
    '/icons/icon-192.png'
];

self.addEventListener('install', event => {
    event.waitUntil(
        caches.open(CACHE_NAME)
            .then(cache => cache.addAll(urlsToCache))
    );
});

self.addEventListener('fetch', event => {
    event.respondWith(
        caches.match(event.request)
            .then(response => {
                return response || fetch(event.request);
            })
    );
});

De install-gebeurtenis vult de cache met je opgegeven bestanden. De fetch-gebeurtenis zorgt ervoor dat de browser eerst in de cache kijkt en pas naar het netwerk gaat als iets niet gevonden is.

HTTPS is verplicht

Service workers werken alleen via HTTPS. Dit zorgt voor een veilige verbinding en voorkomt dat kwaadwillenden ongevraagd data kunnen afluisteren of manipuleren. Tijdens ontwikkeling kun je localhost gebruiken zonder HTTPS, maar zodra je live gaat, moet je een SSL-certificaat installeren.

Offline-first benadering

Het voordeel van een PWA is dat je app zelfs zonder internet grotendeels functioneel blijft. Voor dynamische data kun je in de service worker aanvullende strategieën toepassen, zoals “cache then network” of “network then cache”. De eerste strategie toont direct de gecachte versie en vernieuwt op de achtergrond, terwijl de tweede eerst een netwerkverzoek doet en bij falen terugvalt op cache.

self.addEventListener('fetch', event => {
    event.respondWith(
        fetch(event.request).then(response => {
            const responseClone = response.clone();
            caches.open(CACHE_NAME).then(cache => {
                cache.put(event.request, responseClone);
            });
            return response;
        }).catch(() => caches.match(event.request))
    );
});

Push-meldingen

Een PWA kan push-meldingen sturen, net als native apps. Dit vraagt om extra stappen: eerst vraag je de gebruiker om toestemming, daarna registreer je een pushservice én verwerk je push-data in de service worker.

Notification.requestPermission().then(permission => {
    if (permission === 'granted') {
        navigator.serviceWorker.ready.then(registration => {
            registration.pushManager.subscribe({
                userVisibleOnly: true,
                applicationServerKey: ''
            }).then(subscription => {
                console.log('Geabonneerd op push:', subscription.endpoint);
            });
        });
    }
});

self.addEventListener('push', event => {
    const data = event.data.json();
    const options = {
        body: data.body,
        icon: '/icons/icon-192.png'
    };
    event.waitUntil(
        self.registration.showNotification(data.title, options)
    );
});

Installatieprompt

Browsers geven soms automatisch een prompt om de PWA te installeren. Je kunt dit ook handmatig triggeren. Bewaar het “beforeinstallprompt”-event en laat een eigen knop zien:

let deferredPrompt;

window.addEventListener('beforeinstallprompt', e => {
    e.preventDefault();
    deferredPrompt = e;
    document.getElementById('install-button').style.display = 'block';
});

document.getElementById('install-button').addEventListener('click', () => {
    deferredPrompt.prompt();
    deferredPrompt.userChoice.then(choice => {
        if (choice.outcome === 'accepted') {
            console.log('App geïnstalleerd');
        }
        deferredPrompt = null;
    });
});

Voorbeelden van succesvolle PWA’s

Twee bekende voorbeelden van bedrijven die overstapten naar PWA’s zijn Twitter en Starbucks. Twitter lanceerde Twitter Lite, een snellere en lichtere versie van de app, met 65% minder data-gebruik. Starbucks bouwde een PWA waarmee barista’s bestellingen snel kunnen uitlezen, zelfs met slechte verbinding, en zag een grote toename in bestellingen.

Bruikbare tools en bronnen

Om je PWA te testen gebruik je de Chrome DevTools in het 'Application' tabblad. Audit je site met Lighthouse voor prestatie- en PWA-checks. Voor het genereren van iconen kun je een generator gebruiken zoals RealFaviconGenerator.

Conclusie

Progressive Web Apps zijn een krachtige manier om je website om te vormen tot een app-ervaring zonder de drempel van de app-store. Met een manifest, een service worker en HTTPS maak je een app die snel laadt, offline werkt en zelfs push-meldingen verstuurt. Je gebruikers krijgen een vlotte, betrouwbare ervaring en jij behoudt één codebase. Begin klein, experimenteer met caching-strategieën en uitbreidende features, en zie hoe je website evolueert naar een moderne PWA.


Vond je dit nuttig? Deel nu met je netwerk!

Facebook | Twitter | LinkedIn | WhatsApp
Maarten

Jouw bijdrage stelt mij in staat om meer artikelen te schrijven.

Leer meer over gebruikerservaring
Zo test je op toegankelijkheid voor gebruikers met een beperking
Een toegankelijke website zorgt ervoor dat iedereen kan vinden wat ze nodig hebben, ook mensen met een visuele, gehoor-, motorische of cognitieve beperking. In dit uitgebreide artikel leer je in eenvoudige taal hoe je kunt controleren of jouw site toegankelijk is...

De ultieme gids voor een betere gebruikerservaring
Een intuïtieve website zorgt ervoor dat bezoekers moeiteloos vinden wat ze zoeken. Hoe meer je site aansluit bij de verwachtingen van gebruikers, hoe langer zij blijven en hoe groter de kans op conversies...

Kiezen tussen het design of de content van je website
Als je een website bezoekt, wat valt je dan als eerste op? Waarschijnlijk het design: kleuren, indeling, afbeeldingen. Maar blijf je ook? Dat hangt vaak af van de inhoud...

Waarom Dwell Time het verborgen geheim van SEO succes is
In de wereld van zoekmachineoptimalisatie (SEO) zijn er veel termen die regelmatig terugkomen: zoekwoorden, backlinks, laadtijd, mobiele vriendelijkheid. Maar één begrip wordt vaak over het hoofd gezien, terwijl het een belangrijke rol speelt in hoe Google jouw website beoordeelt: dwell time. Dwell time is de tijd die iemand op jouw website doorbrengt nadat hij of zij op jouw link in de zoekresultaten heeft geklikt, maar vóórdat die persoon teruggaat naar Google...

Hoe elke extra klik je een verkoop kan doen verliezen
Stel je voor: je bent een klant en je wilt snel een product bestellen. Je vindt de website, zoekt het juiste product, voegt het toe aan je winkelwagen, vult je gegevens in en voltooit de betaling...

Spreek de taal van je bezoeker en niet van je vakgroep
Stel je voor: je loopt een winkel binnen en vraagt waar je sokken kunt vinden. De verkoper antwoordt: “Onze katoenen voetbekledingsproducten bevinden zich in het onderbeen-accessoiresegment van de textielafdeling.” Grote kans dat je denkt: “Wat bedoelt hij nou?” en gewoon weer wegloopt. Precies dát gebeurt online als je website spreekt in vakjargon, technische termen of wollige taal...

Een logisch opgebouwde website bepaalt je succes
Bezoekers zijn net reizigers. Ze komen met een doel op je website en willen snel, duidelijk en zonder obstakels hun bestemming bereiken...

Doe nu de gratis SEO Checker

De meeste websites zijn eenvoudig naar een hoger level te brengen door eerst de meest basale SEO op orde te krijgen. Mijn gratis SEO Checker controleert voor je of jouw website aan deze basis voldoet, of dat er nog verbetering te behalen valt.

Gebruik nu mijn gratis SEO Checker

Vul de URL van je website in en zie waar je jouw website mee kunt verbeteren. Let op: Een 100% score wil alleen zeggen dat je de basale SEO voor de betreffende pagina op orde hebt. Voor meer tips nodig ik je graag uit om al mijn artikelen te lezen.







© 2025 VisibleURL.com. All rights reserved.

Also available in:

USA flag