Översikt
Förra veckan blev applikationen installerbar och fungerade offline. Den här veckan gör du den snabbare och mer pålitlig. Veckans artiklar går igenom hur en SPA håller URL:en i takt med det som visas, hur du laddar kod först när den behövs, vilket krävs för högre betyg på B3, och hur applikationen beter sig när nätverket finns men inte fungerar. Information om veckans upplägg annonseras löpande i kursens Zulip-kanal.
Veckans artiklar
Section titled “Veckans artiklar”Veckans teori finns samlad i tre artiklar. Läs dem i ordning; varje artikel bygger på den föregående.
-
Routing i en SPA –
URLochURLSearchParams,pushState()och bakåtknappen, query string, hash eller sökväg, och vad routing betyder för service workern. Routing är inget krav i B3. -
Lazy loading –
loading="lazy"för bilder, dynamiskimport()i ett Vite-projekt, custom elements som definieras sent och vad som fungerar offline. -
Online, offline och Lie-Fi – vad
navigator.onLineinte säger, timeouts medAbortSignal.timeout(), network first med timeout och att återansluta en WebSocket.
Läsanvisningar
Section titled “Läsanvisningar”Under läsanvisningar hittar du veckans kapitel som ska läsas i kurslitteraturen. Planera upp och dela upp läsningen under veckan.
Övningar
Section titled “Övningar”Ingen ny övningsuppgift den här veckan. Exemplen i artiklarna bygger vidare på Memory från kursvecka 14, och det går bra att prova dem där.
Utmaningar
Section titled “Utmaningar”Under Utmaningar hittar du sex frågor om routing, lazy loading och opålitliga nätverk, ett bra sätt att stämma av att du har förstått artiklarna.
Äldre inspelningar
Section titled “Äldre inspelningar”Inspelningarna från 2020 och 2021 går igenom samma stoff som artiklarna, men är delvis inaktuella.
Bland annat nämns byggverktyget Snowpack i stället för Vite, loading="lazy" beskrivs som
experimentellt och exemplet med import() använder en sökväg som inte fungerar i ett Vite-projekt.
Artiklarna räcker, men vill du se genomgången i rörlig bild finns den kvar här. Sammanfattningar och
presentationer till inspelningarna hittar du i
samlingen av inspelningar för delkurs B.
Pålitliga PWA:er: routing med window.location, pushState och popstate, online eller offline och klientsidebibliotek. Motsvarar den första och tredje artikeln.
Lazy loading: strategier, bilder och dynamisk import av JavaScript-moduler. Motsvarar den andra artikeln.
Handledning
Section titled “Handledning”Skicka gärna in frågor på förhand via formuläret som du når här:
Examinationsuppgift B3
Section titled “Examinationsuppgift B3”Inte kommit igång med uppgiften? Nu är det hög tid! Läs mer om examinationsuppgift B3.
Studiefrågor
Section titled “Studiefrågor”Här är ett antal frågor som du kan försöka besvara och diskutera tillsammans med din AI-assistent. Tveka inte att lyfta någon av frågorna till handledningen för att fortsätta diskussionen med lärare och studiekamrater.
- Vad ska en URL i en SPA beskriva, och vad hör inte hemma där?
- Vad gör
history.pushState(), och när utlösespopstate? - Vad är skillnaden mellan att lägga det som visas i query stringen, i hashen och i sökvägen?
- Vad innebär lazy loading, och när är det inte värt det?
- Vad händer i webbläsaren från att
import()anropas tills ett custom element har uppgraderats? - Varför kan inte
navigator.onLineavgöra om applikationen når servern? - Vad är Lie-Fi, och hur kan en service worker skydda användaren mot det?
Här är en utskrift från hur det såg ut när jag diskuterade ett par av frågorna med min AI-assistent Ajj.
Här följer tips till hur du kan prioritera bland kursmaterialet för att komma igång med veckan.
- Börja koda B3, lös grunderna för fönsterhanteringen först, därefter lägger du till en applikation. Sedan är grunden på plats och du kan lägga till fler applikationer.
- Lägg ett fönster överst med
z-index, inte genom att flytta det i DOM:en. En flytt kör komponentensdisconnectedCallback()ochconnectedCallback(), så det som startats i fönstret börjar om. - Siktar du på högre betyg, läs Lazy loading innan du kopplar ihop dockan med
underapplikationerna. Det är enklare att ladda dem med
import()från början än att bygga om senare. - Routing behövs inte i B3. Läs artikeln för att förstå hur History API fungerar, men lägg inte till routing i ditt PWD om du inte har ett tydligt skäl.


