Webbutveckling 1 · område 7 · uppgift
Projekt 6 – Optimerad och diskret sajt
Det här är områdets kravdokument. Optimeringsguiden, fördjupningsguiden och genomgångarna ska stödja kraven nedan – inte tvärtom.
- 12 mars Inlämning kl 23:59 Projekt 6 – repo-länken lämnas i itslearning.
1. Uppdraget
Du ska göra din sajt lättare och tåligare. Lättare: bilderna ska väga en bråkdel av vad de väger nu, och du ska kunna visa hur mycket med en mätning före och efter. Tåligare: sajten ska fungera även när JavaScript inte gör det.
Ingenting nytt ska byggas. Sajten ska se likadan ut när du är klar – den ska bara komma fram fortare och hålla bättre.
Det är den sista uppgiften före slutprojektet, och den är därför också en genomgång av allt du byggt: område 2:s struktur, 3:s form, 4:s tillgänglighet och 6:s moduler ska alla stå pall när du mäter och stänger av.
2. Vilken sajt gäller det?
Samma sajt som i Projekt 5, i samma repo.
Har du av något skäl ingen fungerande sajt med moduler: hämta referensprojekt/ ur områdets material och arbeta med den. Säg till innan du gör det, så att vi vet att du gör det medvetet. Den vägen ger E och C – A kräver att du arbetar i något du byggt själv.
3. De två halvorna
| Lektion | Handlar om | |
|---|---|---|
| Optimering | 63–64 | Bilder, filer, laddtid. Mätbart i kilobyte och sekunder |
| Diskret funktionalitet | 65–66 | Att sajten fungerar utan JavaScript |
De är olika sorters arbete. Optimeringen är mekanisk och går fort när du vet hur. Den diskreta delen kräver att du läser din egen kod och tänker om på några ställen.
Börja med optimeringen. Den går att göra klart före sportlovet, och då har du de tre sista veckorna på den andra halvan.
4. Kraven
Kryssa av allt eftersom. Kryssen sparas i din webbläsare.
Alla elva ska vara uppfyllda.
Ska-krav — nivå E
Bör-krav — mot nivå C
Utmaning — mot nivå A
5. Tekniska krav
| Krav | Varför |
|---|---|
| Inga bibliotek, inga ramverk | Samma regel som i Projekt 5 |
Inga style=-attribut i HTML:en | Stil hör i stilmallen. Gällde från område 3 |
Inget innerHTML för text som kommer utifrån | Säkerhetsregeln från Projekt 5 |
| Relativa sökvägar, gemener i filnamn | Sajten ska fungera publicerad |
| Originalbilderna sparas utanför repot | Ett repo ska inte innehålla 40 MB kameraoriginal |
Bilder du inte använder tas bort ur bilder/ | Skräp förvirrar den som rättar, och dig själv |
Det här lämnas in
I itslearning: länken till ditt publika GitHub-repo. Inget annat, och inte koden.
I repot ska finnas:
index.html och dina övriga sidor
stil.css
js/
bilder/ bara de bilder sajten använder, i rätt storlekar
README.md med mätningen och testet
Så kan mätavsnittet se ut
Två rubriker i README.md. Det här är lydelsen som bedöms, och den behöver inte vara längre än så här:
## Mätning
Startsidan, nätverksfliken med Disable cache och Slow 4G,
på den publicerade adressen:
Före: 12 requests, 3,4 MB, 14,2 s
Efter: 9 requests, 210 kB, 1,6 s
Tyngsta filen före var hero.jpg: 2,9 MB, 4032 px bred,
visades i 640 px. Den är nu tre filer – 400, 800 och
1600 px – i WebP med JPEG som reserv, och den som hämtas
på min telefon väger 18 kB. Resten av minskningen är de
fyra bilderna på galleri.html, som fick loading="lazy"
och halverad bredd.
## Testat utan JavaScript
Avstängt i Inspektera 4 mars, alla fem sidorna:
index.html OK. Allt innehåll finns, inga döda knappar
galleri.html OK. Filterraden gömd, alla bilder syns
kontakt.html OK. required kvar, webbläsaren validerar själv
om.html OK
quiz.html Knappen "Rätta" syns och gör inget.
Medvetet: den är type="submit", sidan
laddas om. Frågorna finns kvar
6. Bedömningsmatris
| Del | E | C | A |
|---|---|---|---|
| Bildstorlek | Bilderna är skalade till sin ruta och ligger i ett modernt format | Flera storlekar med srcset och sizes som stämmer med CSS:en | picture med formatfallback, och valen går att motivera per bild |
| Mätning | En mätning före och efter finns | Mätningen är kommenterad: vad som var tyngst och varför siffran ändrades | Lighthouse-listan är genomgången och kvarvarande rader är förklarade |
| Utan JavaScript | Ingenting kraschar, inget innehåll försvinner, inga döda kontroller | Minst en modul förbättrar något som redan fungerar utan den | Hela sajten degraderar medvetet, och du kan förklara varje funktion |
| Egen kod | – | Modulernas anpassningar är gjorda i ÄNDRA HÄR-zonen | Egen diskret funktion skriven ur reglerna, med kapsel och kontroller |
| Tillgänglighet | alt på varje bild, label på varje fält | Formuläret validerar i HTML och skriptet förbättrar | aria-live där något ändras, och checkValidity() styr felen |
| Dokumentation | Mätningen står i README.md | Testet utan JavaScript är dokumenterat sida för sida | Jämförelsen diskret mot hårdkodad finns och håller |
Matrisen läses vågrätt: en A-kolumn förutsätter att E och C i samma rad är gjorda.
7. Kom igång – de tre första sakerna
- Mät innan du ändrar något. Öppna din publicerade sajt, nätverksfliken, Disable cache, ladda om. Skriv av talen. Du kan inte visa en förbättring du inte har ett före-värde till.
- Sortera på Size och titta på översta raden. Det är nästan alltid en bild, och det är nästan alltid över hälften av hela sidans vikt.
- Gör om den ena bilden. Skala, komprimera, byt format, lägg in
widthochheight. Mät igen. Nu vet du hur mycket en bild är värd, och resten är samma sak en gång till.
8. Så ligger tiden
| Vecka | Lektioner | Bör vara klart |
|---|---|---|
| v.6 | 63 tis 9/2 · 64 fre 12/2 | Mätningen före är gjord. Den tyngsta bilden är åtgärdad |
| v.7 | sportlov | – |
| v.8 | 65 mån 22/2 · 66 tis 23/2 · 67 fre 26/2 | Alla bilder klara. Du vet vad som går sönder utan JavaScript |
| v.9 | 68 mån 1/3 · 69 tis 2/3 | Ska-kraven 7–10 är uppfyllda. Mätningen efter är gjord |
| v.10 | 70 mån 8/3 · 71 tis 9/3 · 72 fre 12/3 | Bör-kraven, A-spårets egen funktion, README.md. Deadline fredag 12/3 23:59 |
| v.11 | 73 mån 15/3 | Prov 5 |
Fredag 5 mars är ledig, så vecka 9 har bara två lektioner. Veckan efter sportlovet är den viktigaste: det är då den diskreta halvan ska landa, och den tar längre tid än optimeringen.
Prov måndag 15 mars
Provet bygger på områdets exempelsajt i två versioner, inte på din egen. Det kommer att fråga om skillnaden mellan dem.
9. Checklista innan du lämnar in
Bilderna
- Ingen bild är mer än dubbelt så bred som rutan den visas i
- Foton ligger i WebP eller AVIF
widthochheightpå varjeimg, utanpxaltpå varjeimgloading="lazy"på allt under första skärmen, men inte på den översta bilden- Oanvända bilder är borta ur
bilder/
Mätningen
- Före och efter står i
README.md - Mätt på den publicerade adressen, med Disable cache
- Samma sida mätt båda gångerna
Utan JavaScript
- Avstängt i Inspektera, varje sida öppnad
- All text och alla bilder finns
- Ingen knapp eller länk som syns men inte gör något
- Formulären går att fylla i,
requiredfinns kvar - Resultatet nerskrivet i
README.md
Det vanliga
- HTML validerar
- CSS validerar
- Konsolen är tom på varje sida
- Repot är publikt
- Länken inlämnad i itslearning
10. Felsökning
12 rader
| Problem | Trolig orsak | Gör så här |
|---|---|---|
| Mätningen visar samma siffra efteråt | Cachen | Disable cache i, ladda om |
| Bilden är suddig efter optimeringen | För hårt komprimerad, eller för liten fil | Gå upp i kvalitet, eller lägg till en större storlek |
srcset verkar inte göra något | Fönstret är lika brett båda gångerna | Testa vid 400 px och vid 1400 px |
| Alltid samma fil hämtas | sizes stämmer inte med CSS:en | Jämför talet i sizes med max-width i stilmallen |
Validatorn klagar på width="800px" | Enhet i attributet | Ta bort px |
| Knappen syns utan JavaScript | hidden saknas | Lägg till hidden, låt skriptet ta bort det |
Knappen syns fast hidden står där | En display-regel i CSS:en | Skriv :not([hidden]) på regeln |
| Bilder försvinner utan JavaScript | Skriptet skriver in dem | Flytta dem till HTML:en |
| Formuläret går att skicka tomt | novalidate i HTML:en, eller required saknas | required i HTML:en, novalidate bara från skriptet |
| Sajten fungerar lokalt men inte publicerad | Stor bokstav i ett filnamn, eller absolut sökväg | Gemener, relativa sökvägar |
| Lighthouse ger 60 i Performance | Nästan alltid bilderna | Läs Opportunities uppifrån |
| Konsolen har ett rött fel efter optimeringen | En bild bytte namn men inte i HTML:en | 404-raden säger vilken |