Wat zijn de ontwikkelingen in Angular? Gerhard, Freek en Michel van ilionx Interactive Marketing waren op 19 en 20 september in Londen voor AngularConnect, de grootste Angular-conferentie van Europa. Lees hieronder een verslag van Freek over de onderwerpen groen programmeren en apps zonder internet.
Naast technisch diepgaande onderwerpen en aankondigingen was er op Angular Connect ook ruimte voor onderwerpen die niet enkel binnen de Angular context van toepassing zijn. Twee talks die mij zijn bijgebleven zijn: “Saving the world, one line at the time” door Asim Hussain, en “Offline first” door Martina Wiśniewska.
Saving the world, one line at the time
Asim begon zijn talk met de vraag: “What is the greener option?”. Er worden in (scrum) meetings vaak allerlei afwegingen besproken voor belangrijke beslissingen, maar een groene of klimaatvriendelijke overweging komt bijna nooit ter tafel. Dit terwijl hier wel degelijk keuzes in te maken zijn, die grote invloed kunnen hebben op uitstoot.
Wat is bijvoorbeeld groener: Een laptop of een desktop? wifi of 3g/4g? server of serverless? Door deze vragen te stellen, wordt er getriggerd om over die groene keuze na te denken. (laptop, wifi en serverless waren de goede antwoorden).
De meeste invloed die een programmeur of it-organisatie heeft op de klimaatverandering, is stroomverbruik. 1 mb datatransmissie genereert om en nabij 10 gram CO2e (Carbon Dioxide en alle andere stoffen die de opwarming van de aarde veroorzaken). Het loont dus al snel om een bijvoorbeeld een website (gemiddeld 2,4mb) zo klein en optimaal mogelijk te maken, geen onnodige data te versturen en plaatjes gecomprimeerd van een server op te halen en uit te pakken in de client. Ook de keuze voor een serverless backend kan veel uitstoot schelen. Serverless is bedoeld om niet meer resources te gebruiken dan strikt noodzakelijk, dit in tegenstelling tot een reguliere server die van te voren moet worden ingekocht, en mogelijk niets doet terwijl de server wel draait. Als laatste tip: Gebruik servers die draaien op groene energie: Azure en Google Cloud draaien volledig op groene energie.
Ik ben persoonlijk erg geïnteresseerd geraakt door deze talk. Wanneer je hier over nadenkt in je dagelijks werk, ga je merken hoe veel je hierin kan betekenen. Door dit thema te bespreken met collega’s of zelf bewuste keuzes te maken.
Het concept Offline First kan herkenbaar klinken; “mobile first” is in de webdev wereld een zeer gangbaar en veelgebruikte term. Bij het ontwerp van een website eerst een mobiele versie maken, en pas later een desktop versie waar meer ruimte in de UI beschikbaar is. Zo ook gaat Offline First over mobiele apps of progressive web apps (pwa’s) die in eerste instantie offline worden ontworpen en ontwikkeld, waarna later functionaliteiten en data communicatie via het internet worden toegevoegd.
Dit brengt een aantal voordelen met zich mee:
Offline state is geen error conditie, de gebruiker is in staat de app te gebruiken met of zonder internet.
Periodieke synchronisatie met de backend in plaats van instant mutaties, dit zorgt voor minder data over en weer en zodoende minder energie en dus meer batterijduur (en minder uitstoot natuurlijk).
Doordat de gebruiker de app kan blijven gebruiken verbetert UX aanzienlijk. De gebruiker ziet geen oneindige loading spinners of error berichten, mogelijk enkel een aanduiding dat er momenteel geen internet connectie mogelijk is.
Snellere UI: een datamutatie wordt lokaal opgeslagen en periodiek gesynchroniseerd, de gebruiker hoeft dus niet te wachten op server processen.
Voorbeelden van bekende apps die dit uitgangspunt succesvol toepassen zijn Spotify en Slack.
Om offline first te implementeren moet er wel rekening gehouden worden met een aantal onderdelen in het ontwikkelproces:
Programmeer de app of pwa eerst offline en test dit volledig en doorgrondig. Begin daarna met de communicatie naar de server.
Gebruik een lokale datastorage, goed gedocumenteerde opties zijn IndexedDB of Cache API. IndexedDB heeft op z’n beurt een aantal wrappers die de toepassing nog makkelijker maken, bijvoorbeeld PouchDB.
Ga ervan uit dat de gebruiker op elk moment de app kan verlaten of afsluiten, hou hier rekening mee en zorg dat de gebruiker door kan met waar hij was gebleven nadat de app opnieuw wordt opgestart.
Zorg voor een goede scheiding tussen data en UI, binnen Angular wordt dit vaak aangeduid als Slimme en Domme componenten.
App shell model
Een pwa met de app shell architectuur zorgt ervoor dat een pagina direct op het scherm van de gebruiker wordt laten zien. Onafhankelijk van de eventuele data die op dat moment nog moet worden geladen. Het is een minimale basis van html, css en javascript, dat lokaal staat opgeslagen, en altijd direct beschikbaar is bij herhalende pagina’s tijdens het gebruik van de app. Zo hoeft een gebruiker nooit op een pagina te wachten, bij een trage internet-verbinding alleen op de pagina content.
Persoonlijk was ik direct geïnteresseerd door dit idee, omdat het zo voor de hand lijkt te liggen terwijl het nog (te) weinig wordt toegepast. Ik heb er zelf nog niet mee kunnen werken maar pas dit concept graag een keer toe.
Cookies zijn kleine tekstbestanden die door websites kunnen worden gebruikt om gebruikerservaringen efficiënter te maken.
Volgens de wet mogen wij cookies op uw apparaat opslaan als ze strikt noodzakelijk zijn voor het gebruik van de site. Voor alle andere soorten cookies hebben we uw toestemming nodig.
Deze website maakt gebruik van verschillende soorten cookies. Sommige cookies worden geplaatst door diensten van derden die op onze pagina’s worden weergegeven.
Via de cookieverklaring op onze website kunt u uw toestemming op elk moment wijzigen of intrekken.
In ons privacybeleid vindt u meer informatie over wie we zijn, hoe u contact met ons kunt opnemen en hoe we persoonlijke gegevens verwerken.
Strikt noodzakelijke cookies
Strikt Noodzakelijke Cookie moet te allen tijde worden ingeschakeld, zodat we uw voorkeuren voor cookie-instellingen kunnen opslaan.
Analytische cookies
Analytische cookies meten websitebezoek, waarmee de eigenaar zijn website kan verbeteren. Denk aan het aantal bezoekers en de meest bezochte webpagina’s.
Google Analytics
_ga
2 years
Used to distinguish users.
_gid
24 hours
Used to distinguish users.
_gat
1 minute
Used to throttle request rate. If Google Analytics is deployed via Google Tag Manager, this cookie will be named _dc_gtm_<property-id>.
AMP_TOKEN
30 seconds to 1 year
Contains a token that can be used to retrieve a Client ID from AMP Client ID service. Other possible values indicate opt-out, inflight request or an error retrieving a Client ID from AMP Client ID service.
_gac_<property-id>
90 days
Contains campaign related information for the user. If you have linked your Google Analytics and Google Ads accounts, Google Ads website conversion tags will read this cookie unless you opt-out. Learn more.
Schakel eerst strikt noodzakelijke cookies in om uw voorkeuren op te slaan!
Marketing
De volgende marketing cookies worden gebruikt:
Hotjar
Cookie naam
Beschrijving
Duur
_hjClosedSurveyInvites
This cookie is set once a visitor interacts with a Survey invitation modal pop-up. It is used to ensure that the same invite does not re-appear if it has already been shown.
365 days
_hjDonePolls
This cookie is set once a visitor completes a Poll using the Feedback Poll widget. It is used to ensure that the same Poll does not re-appear if it has already been filled in.
365 days
_hjMinimizedPolls
This cookie is set once a visitor minimizes a Feedback Poll widget. It is used to ensure that the widget stays minimized when the visitor navigates through your site.
365 days
_hjDoneTestersWidgets
This cookie is set once a visitor submits their information in the Recruit User Testers widget. It is used to ensure that the same form does not re-appear if it has already been filled in.
365 days
_hjMinimizedTestersWidgets
This cookie is set once a visitor minimizes a Recruit User Testers widget. It is used to ensure that the widget stays minimized when the visitor navigates through your site.
365 days
_hjDoneSurveys
This cookie is set once a visitor completes a survey. It is used to only load the survey content if the visitor hasn't completed the survey yet.
365 days
_hjIncludedInSample
This cookie is set to let Hotjar know whether that visitor is included in the sample which is used to generate Heatmaps, Funnels, Recordings, etc.
365 days
_hjShownFeedbackMessage
This cookie is set when a visitor minimizes or completes Incoming Feedback. This is done so that the Incoming Feedback will load as minimized immediately if they navigate to another page where it is set to show.
365 days
Onlinesucces.nl
Cookie naam
Beschrijving
Duur
logger
connect.onlinesucces.nl
365 days
Facebook
Naam
Aanbieder
Doel
Vervaldatum
fr
http://facebook.com/
Used by Facebook to deliver a series of advertisement products such as real time bidding from third party advertisers.
3 months
ilionx.com analytics
Naam
Aanbieder
Doel
Vervaldatum
CPSESSIONID
http://www.ilionx.com/
Used for website usage analytics to distinguish user sessions.
30 minutes
CPUSERID
http://www.ilionx.com/
Used for website usage analytics and personalization to distinguish users.
900 days
Schakel eerst strikt noodzakelijke cookies in om uw voorkeuren op te slaan!