Hjelp:Dynamisk meny

Fra Wikipedia, den frie encyklopedi
Eksempel på dynamisk meny.

Dynamisk meny er en tilleggsfunksjon som gjør venstremargen adaptiv slik at mye brukte sider legges til. Dette forutsetter at de aktuelle sidene er lagt i egne kategorier som følger navngivingen til portletene i panelet. Når dette er gjort vil det lages ekstra lenker til de enkelte sidene når de er aksessert tilstrekkelig mange ganger, først som lenker i ekstra menyer og deretter som lenker i den ordinære venstremargen. Når det finnes ekstramenyer vil det legges inn en hellip (…) oppe til høyre i den aktuelle ordinære menyen.

De dynamiske oppføringene kommer i tillegg til venstremargens ordinære oppføringer, som i denne sammenhengen er statiske. Både de statiske og dynamiske oppføringene kan manipuleres via styling, typisk slik at enkelte elementer legges til eller fjernes på bakgrunn av brukernes gruppetilhørighet. Generelt bør ting som er overflødig for flest mulig slås av med en gang og så overstyres via styling. Hvis det blir for mye regler som overstyrer hverandre på samme elementet så kan det bli flikker.

Det er ikke helt enkelt å overstyre de dynamiske oppføringene da de mangler enkle identifikatorer. Det er ikke lagt arbeid i dette da manipulering av disse lenkene gir lite ekstra brukeropplevelse. Hvis det er nødvendig bør det være nokså enkelt å lage en identifikator basert på sidenavnet eller artikkelid.

Bruk av tilleggsfunksjonen vil ikke gi ekstra serverlast.

Algoritme[rediger | rediger kilde]

det er to forskjellige algoritmer som brukes i to alternative implementasjoner. Den ene baserer seg på least frequently used og den andre på least recently used. Begge modellene er modifisert så de gir noe bedre resultat for det som oppfattes som cache'ens hode.

Least frequently used[rediger | rediger kilde]

Denne løsningen tar lar aktuelle kandidater stå på prøve i et tidsrom, egentlig et antall steg i en pipeline, og innenfor denne tiden beregnes det hvor hyppig oppføringen brukes. Hyppighet beregnes dels utfra hvor langt kandidaten er ut i pipeline'en, og dels utfra en eksponentielt avtagende funksjon. De kandidatsidene som brukes ofte og for kort tid siden vil derfor vektes opp. Metoden er derfor en variant av LFU-Ageing.

En fordel med metoden var at det var mulig å sette absoluttverdier for hvor hyppig en oppføring skulle være brukt før den ble tatt med. Dette ville i teorien gi en følelse av at når noe ble tatt med så var det fordi oppføringen var viktig. En tilsvarende, men lavere verdi ble brukt for sidemenyens undermeny.

Metoden viste seg å gi relativt hyppige endringer i hva som var plassert i venstremargen og tidvis en følelse av at noe en var vandt med at var der plutselig forsvant. Spesielt var dette påtakelig når det bare var en eller noen få oppføringer der og de plutselig ble borte. Dette gir en negativ brukeropplevelse.

Least recently used[rediger | rediger kilde]

Etter en omskriving ble det implementert en løsning med Least recently used. Metoden baserer seg på en kort pipeline hvor oppføringer forkastes om de ruller ut av pipelinen. De som er i pipelinen vil kunne promoteres til pipelinens hode hvis de blir aksessert på nytt. Når de aksesseres inkrementeres en teller i dem, og denne telleren brukes for å sortere ut de viktigste oppføringene.

Fordi det ikke er noen klar maksimalverdi på telleren så brukes de N første kandidater i sidemenyen. Et ytterligere antall M sorteres ut og plasseres i sidemenyens undermeny.

Metoden har gitt noe mer stabile resultater, og ikke minst etablerer den noen oppføringer i venstramargen tidlig. Det gjør at brukeren får en følelse av at noe skjer på et tidlig tidspunkt, noe som gir en positiv brukeropplevelse.

Registrering av kandidater for LFU[rediger | rediger kilde]

For å legge lenker til portletten som har tittelen «Prosjekt» så brukes dennes id i navnet til en ny kategori. I dette tilfellet er ikke navnet på portleten forberedt for lokalisering og dens id stemmer overens med tittelen, den heter p-prosjekt. Innledningen på navnet fjernes og brukes så til å lage Kategori:Sidebar prosjekt. Navnet kan brukes på litt forskjellige former, men innledningen «Sidebar» må være med. Kategoriene plasseres i foreldrekategorien Kategori:Sidebar slik at det er lettere å finne frem blant dem. Disse kategoriene er skjulte da de ikke er spesielt nyttig for andre enn de som setter opp denne navigeringen.

Det er satt opp noen slike kategorier som dekker de mest aktuelle av portletene. I tillegg til sider som er nokså opplagte, slik som Tinget, Torget og Oraklet så kan også spesialsider legges i slike kategorier, men da med litt endring i de aktuelle scriptene.

Registrering av kandidater for LRU[rediger | rediger kilde]

Denne metoden bruker bestemte navnerom som kilde for kandidater til de enkelte portlet'ene. Det er derfor ikke nødvendig med ytterligere konfigurering.

Eksempler på overstyring av statiske lenker[rediger | rediger kilde]

Override visibility for ordinary users

Override for all users for elements that shall e removed. The element identified by #n-portal is an example of an element that will be removed. The identifier is reused from the definitions in Mediawiki:Sidebar.

.portal #n-portal { display: none; }
Override visibility for patrol

Override spesific for patrollers. Because this has an added class identifying one of the users groups it has a slightly higher weight in the cascade. This will make it override the settings for the ordinary users.

.patrol .portal #n-portal { display: none; }
Override visibility for sysops

Override spesific for sysops. This adds the !important clause which gives it even more weight in the cascade than definitions for the patrollers.

.sysop .portal #n-portal { display: none !important; }

Tilleggsfunksjonen er laget slik at den støtter draktene «vector», «monobook» og «modern». Den vil ikke fungere for andre skin, men vil heller ikke gi feilmelding.

Tilleggsfunksjonen bruker «web storage», noe som gjør at en må ha en relativt moderne nettleser om den skal fungere. Funksjonen er testet på Firefox 5.0/Ubuntu (ok), Google Chromium 12/Ubuntu (issues - graphical artifacts), Opera 11.50/Ubuntu (ok), IE9/Win7 (ok), Google Chromium 12/Win7 (ok), Opera 11.50/Win7 (ok), Safari 5.0.5/Win7 (ok).

Forbedringer[rediger | rediger kilde]

Muligens burde løsningen skifte mellom strategier på bakgrunn av hva brukeren gjør, det vil si at den burde skifte til LFU når brukeren redigerer. Det vil ranke opp artikler det arbeides med. Hvordan artikler listet etter to forskjellige strategier skal flettes sammen er litt uklart. Kanskje kan en ha en egen portlet for «under arbeid» og kun bruke en alternativ algoritme på denne.