Hoe AJAX het internet heeft getransformeerd: van live zoeken naar apps met één pagina

19

De term Asynchronous Javascript And XML (AJAX) klinkt als een mondvol, maar beschrijft een eenvoudig concept: delen van een webpagina bijwerken zonder de hele pagina opnieuw te laden.

Als je voorheen nieuwe gegevens wilde, wachtte je. Je hebt op een link geklikt. Het scherm bevroor. De pagina werd wit. Daarna werd alles opnieuw geladen.

Ajax heeft daar verandering in gebracht. Hierdoor konden browsers met servers op de achtergrond praten. U kunt een zoekopdracht typen en de resultaten onmiddellijk zien verschijnen. Geen herladen. Geen wit scherm. Gewoon gegevens.

Dit was geen nieuwe uitvinding. Het was een combinatie van bestaande tools die op een nieuwe manier werden gebruikt.

De kerntechnologieën achter asynchroon webdesign

AJAX is geen enkele technologie. Het is een werkstroom. Het is afhankelijk van de coördinatie van standaard webtechnologieën.

De kern ervan is het XMLHttpRequest -object. Dit is een ingebouwde JavaScript-functie. Hiermee kunnen scripts aan de clientzijde HTTP-verzoeken (zoals GET of POST) naar een server initiëren. De browser verzendt het verzoek. Het wacht niet op het antwoord voordat het doorgaat met het weergeven van de pagina. Dit is het “asynchrone” gedeelte.

Zodra de server reageert, neemt JavaScript de gegevens op. Het ontleedt het. Het werkt het Document Object Model (DOM) bij. De gebruiker ziet de wijziging zonder ooit de pagina te verlaten.

“AJAX onderscheidt zich door een architectuur waarin code aan de clientzijde het ophalen, interpreteren en realtime weergeven van gegevens orkestreert, zonder algemeen herladen of verlies van interactiviteit.”

Lange tijd waren deze gegevens in XML-formaat beschikbaar. Vandaar de naam. XML is uitgebreid. Het is zwaar.

Later nam JSON (JavaScript Object Notation) het over. JSON is lichter. Het is gemakkelijker voor JavaScript om te verwerken. Moderne raamwerken zoals jQuery en fetch API hebben het beheer van deze verzoeken nog eenvoudiger gemaakt. Maar het kernprincipe blijft: ontkoppel de gebruikersinterface van de servercommunicatie.

Waarom browsercompatibiliteit er altijd toe deed

In de beginperiode was dit moeilijk.

Niet alle browsers ondersteunen XMLHttpRequest. Of ze hebben het anders geïmplementeerd.

Internet Explorer 5 en hoger haalden uiteindelijk de achterstand in. Mozilla Firefox volgde dit voorbeeld. Safari en Chrome sloten zich later bij het gezelschap aan. Tegenwoordig ondersteunt elke moderne browser deze functies standaard.

Door deze convergentie konden ontwikkelaars complexe interacties bouwen die overal werkten. Voordien moest je hackcode schrijven om dingen in Firefox te laten werken, maar niet in IE. Of andersom.

Nu ligt de nadruk op logica, niet op compatibiliteitshacks.

Toepassingen uit de echte wereld die de ervaring definiëren

Je hebt AJAX duizend keer gebruikt. Waarschijnlijk denk je er niet over na.

Denk eens aan Gmail. Wanneer u een inbox opent, laadt u de pagina niet opnieuw om een ​​nieuwe e-mail te lezen. De client haalt de nieuwste berichten op de achtergrond op. U kunt slepen, verwijderen of archiveren. De pagina blijft staan. De gegevens worden bijgewerkt.

Windows Live Hotmail deed al vroeg iets soortgelijks. Google Maps maakt er voortdurend gebruik van. Je verschuift de kaart. De browser vraagt ​​om nieuwe kaarttegels. Ze verschijnen onmiddellijk. U wacht niet tot een volledige pagina is geladen.

LiveSearch is een klassiek voorbeeld. Terwijl u trefwoorden typt, ondervraagt ​​de zoekmachine de server. Resultaten vallen naar beneden. Je klikt op één. De pagina springt naar het resultaat. Dit gebeurt allemaal via AJAX-oproepen.

De toepassingen zijn eindeloos.

  • Dynamische commentaarsecties
  • Formulieren automatisch opslaan
  • Realtime aandelentickers
  • Oneindige scrollfeeds

Deze functies creëren het gevoel van een applicatie met één pagina. De site gedraagt ​​zich meer als een desktop-app. Het voelt pittig. Het voelt levend.

De verschuiving naar Single Page Applications (SPA’s)

AJAX maakte de weg vrij voor SPA’s.

Op een traditionele website betekent elke klik het laden van een nieuwe pagina. De browser gooit de oude DOM weg en bouwt een nieuwe.

In een SPA wordt de eerste pagina geladen. JavaScript verzorgt alle daaropvolgende navigatie. Het wisselt inhoud dynamisch uit. De URL kan veranderen, maar de pagina wordt niet opnieuw geladen.

Dit vereist complexere code aan de clientzijde. Je moet de staat beheren. Je moet de routing regelen. Maar de gebruikerservaring is superieur.

Sociale netwerken zijn hiervan afhankelijk. Wanneer u een statusupdate plaatst, wordt de feed vernieuwd. Je profielfoto wordt geladen. Er verschijnen meldingen. Niets van dit alles vereist een volledige herlaadbeurt.

De erfenis van asynchrone gegevensuitwisseling

De afkorting AJAX is enigszins verouderd. Ontwikkelaars gebruiken de term tegenwoordig zelden. Wij noemen het gewoon ‘webontwikkeling’.

Maar de technologie leeft voort. XMLHttpRequest is grotendeels vervangen door de fetch API. JSON is het standaardgegevensformaat.

De impact valt niet te ontkennen. Het wekte de verwachtingen van de gebruikers. We verwachten nu onmiddellijke feedback. Wij verwachten soepele overgangen. We verwachten dat webapps aanvoelen als native software.

Als een site elke keer dat u op een knop klikt, opnieuw wordt geladen, voelt deze kapot. Het voelt oud.

AJAX bewees dat het web meer kan zijn dan statische documenten. Het zou een platform kunnen zijn voor complexe, interactieve toepassingen.

De evolutie stopte daar niet. Frameworks als React, Angular en Vue hebben op deze fundamenten voortgebouwd. Ze automatiseren de DOM-updates. Zij beheren de staat.

Maar het kernidee is hetzelfde.

Praat met de server op de achtergrond. Werk het scherm bij. Houd de gebruiker in beweging.

Wij zijn dit nog aan het verfijnen. Oneindige rollen. Realtime samenwerking. Live voorbeschouwingen. De mogelijkheden blijven grotendeels onbenut.

Wat komt er daarna? Waarschijnlijk minder klikken. Meer streamen. Meer directheid.

De pagina blijft. De gegevens bewegen.

AJAX is geen magie. Het is een afweging.

Je krijgt snelheid. U krijgt soepele gebruikersinterfaces. Maar je krijgt er ook hoofdpijn van.

Het grootste wrijvingspunt is niet de code. Het is veiligheid. In het bijzonder het Same Origin Policy (SOP). Standaard vergrendelen browsers AJAX-verzoeken. Ze praten alleen met het domein waarop de gebruiker zich momenteel bevindt. Dit voorkomt dat een kwaadaardig script op evil.com gegevens van de site van uw bank steelt. Het is een harde muur.

Maar ontwikkelaars moesten die muur doorbreken.

Voer CORS (Cross-Origin Resource Sharing) in. Het is het mechanisme waarmee verschillende domeinen met elkaar kunnen praten. U configureert het op de server. Als je het verkeerd doet, leg je gegevens bloot. Als je het goed doet, schakel je moderne, gedistribueerde apps in. De lat ligt hoog. De configuratie moet rigoureus zijn.

Dan is er de browsergeschiedenis.

Wanneer u een pagina bijwerkt zonder opnieuw te laden, verandert de URL niet. Of dat is wel zo, maar de gebruiker weet het niet. Druk op “terug”. Er gebeurt niets. Of erger nog, de pagina wordt opnieuw geladen en verliest alle status. Dit doorbreekt het mentale model van de gebruiker.

Je moet het repareren.

Beheer de geschiedenisstapel expliciet. Gebruik de HTML5 Geschiedenis-API. Push-staten. Luister naar popstaten. Het is vervelend. Het is noodzakelijk. Voordien gebruikten mensen hashbangs (“#!`). Het werkte. Maar het was rommelig.

Toegankelijkheid is een andere valkuil.

Dynamische inhoud kondigt zichzelf niet altijd aan bij schermlezers. Als u tekst uitwisselt via AJAX, merkt de hulptechnologie dit mogelijk niet. U moet ARIA-kenmerken bijwerken. Je moet gebeurtenissen activeren. Anders bouw je een site die alleen werkt voor muisgebruikers.

Het landschap is aan het veranderen.

fetch neemt het over van onbewerkte XHR-verzoeken. Het maakt gebruik van beloften. Het is schoner. Het is modern. WebSockets voegen bidirectionele, realtime communicatie toe. Je hoeft niet meer te stemmen. Je krijgt gepushte updates.

Maar AJAX is nog steeds de basis.

Het introduceerde het patroon. Asynchroon. Modulair. Niet-blokkerend.

De wolk bewoog. Mobiel heeft het overgenomen. Progressive Web Apps (PWA’s) vereisten offline mogelijkheden en snelheid. Ze steunen allemaal op deze kernprincipes.

Is Ajax dood? Nee.

Het is gewoon de laag onder de nieuwere tools. De machinekamer.

Ontwikkelaars optimaliseren er nog steeds voor. Ze geven nog steeds om het staatsbeheer dat het ons heeft moeten oplossen. De innovatie in interface-engineering? Het is gebouwd op dat historische fundament.

We blijven de ervaring verfijnen. Het doel blijft hetzelfde.

Snel. Responsief. Onopvallend.

Maar de inzet is nu hoger. De beveiliging is strenger. Gebruikers verwachten native-achtig gedrag. En de code moet voor iedereen toegankelijk zijn.

Het is een voortdurende evenwichtsoefening. Eén die je nooit echt afmaakt.