Gå til innhold

"Loadingbilde" mens man venter


Anbefalte innlegg

Jeg har en nettside hvor jeg generer en liste med nyheter basert på mange rss-feeds, og ofte tar det litt tid å generere denne lista. Det jeg kunne tenkt meg var at resten av siden først ble vist, mens nyhetslista ble hentet underveis. Gjerne i form av en gif-animasjon som viser at lista hentes. Jeg har utrolig liten kunnskap når det kommer til javascript (jeg regner med det er den enkleste måten å gjøre dette på?), men jeg forestiller meg jeg har en egen fil med lista, som inkluderes og erstattes med et bilde i inntil lista er ferdig lasta. Kan det gjøres?

Lenke til kommentar
  • 4 uker senere...
Videoannonse
Annonse

Hei, ja det er fult mulig, men krever litt kjennskap til javascript.

 

For en slik oppgave ville jeg benyttet meg av et javascript bibliotek, i mitt eksempel nedenunder har jeg benyttet meg av jQuery.

 

<html>
<head>
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
// Load jQuery
google.load("jquery", "1");
google.setOnLoadCallback(initialize); // Vi laster jQuery biblioteket fra google sine sider

function initialize() {
 $.get('data.html', function(data) { // vi henter ut all informasjon fra filen data.html
$('div#news').html(data); // vi printer ut denne informasjonen i div'en "news"
 });
}
</script>
</head>
<body>
<div id="news">
 <img src="ajax-loader.gif" alt="Loading" />
</div>
</body>
</html>

 

Her viser siden et animiert bilde (ajax-loader.gif) helt til javascript funksjonen har hentet ut all tekst fra filen data.html. Når teksten er hentet vil den bli printet ut i div med id "news" og dermed erstatte loading bilde.

 

ajaxload.info er forresten en glimrende side for å generere loading bilder :)

Lenke til kommentar

Hvis det tar lang tid å generere siden fordi den hentes fra mange RSS, kan det være en god ide å buffre RSS-filene lokalt, kanskje også HTMLen du generere fra RSSen, slik at lasting av siden går fortere.

 

Hvis du gjør dette, kan det drastisk redusere tiden det tar å loade siden din. Husk at folk er svært lite tålmodige når det gjelder å vente på at sider skal loade.

Lenke til kommentar
Hvis det tar lang tid å generere siden fordi den hentes fra mange RSS, kan det være en god ide å buffre RSS-filene lokalt, kanskje også HTMLen du generere fra RSSen, slik at lasting av siden går fortere.

 

Hvis du gjør dette, kan det drastisk redusere tiden det tar å loade siden din. Husk at folk er svært lite tålmodige når det gjelder å vente på at sider skal loade.

Sikkert ingen dum idé. Hvordan går jeg frem hvis jeg vil få til en slik løsning?

 

ahlt: Hadde funnet ut av det, men takk uansett ;)

Lenke til kommentar

Du henter filene og lagrer de lokalt på serveren din. Så genererer du html til en fil. Så henter du inn den filen i web-siden du ønsker å vise resultatet.

 

Så må du med gjevne mellomrom sjekke om det har kommet oppdateringer. Dette kan du gjøre ved å lagre hashen av de lokale filene i en egen fil. Så sjekker du disse hashene mot hashen av remote filene. Det beste er om rss leverandøren tilbyr hash av filene sine. Ellers må du laste ned filen og hashe manuelt for sammenlikning.

 

Periodisk oppdatering kan gjøres ved at du lagrer time() i en fil og sjekker denne filen ved hver request. har det gått så så lang tid siden sist time() ble lagret, gjør du en oppdaterings sekvens på rss filene og lagrer time() på nytt.

Lenke til kommentar
Du henter filene og lagrer de lokalt på serveren din. Så genererer du html til en fil. Så henter du inn den filen i web-siden du ønsker å vise resultatet.

 

Så må du med gjevne mellomrom sjekke om det har kommet oppdateringer. Dette kan du gjøre ved å lagre hashen av de lokale filene i en egen fil. Så sjekker du disse hashene mot hashen av remote filene. Det beste er om rss leverandøren tilbyr hash av filene sine. Ellers må du laste ned filen og hashe manuelt for sammenlikning.

 

Periodisk oppdatering kan gjøres ved at du lagrer time() i en fil og sjekker denne filen ved hver request. har det gått så så lang tid siden sist time() ble lagret, gjør du en oppdaterings sekvens på rss filene og lagrer time() på nytt.

Slik å forstå. Problemet er at hver bruker selv legger inn rss-feeder som kan følges (fra bestemte nettsider), altså kan det ende opp med å bli veldig mange feeder som hele tiden må synkroniseres, og det bør jo ikke være lang tid mellom hver gang de sjekkes, for at resultatene skal være aktuelle.

 

Det som tar tid, er vel for skriptet å faktisk besøke hver enkelt feed, og da kommer jeg vel ikke unna problemet uansett..?

Lenke til kommentar
det beste du kanskje kan gjøre er å lagre feeden lokalt, og oppdatere for hver request. vis brukeren rss fra den lokale cachen og generer ny etter at brukeren har fått alt innholdet.

Det er vel også en mulighet. Men man kan fortsatte risikere å vise en uaktuell feed til brukeren, og litt av vitsen med tjenesten er å få "ferske" innlegg

Lenke til kommentar

Kort forklaring på hvordan du buffrer RSS-feeds:

 

1. Lag en egen PHP-klasse for å hente ned RSS-feeder. Lag en funksjon, f.eks. fetch($url), som laster ned RSS-feed med url $url.

 

2. Funksjonen sjekker først om $url finnes i en lokal MySQL-database. Hvis den finnes, returner fra databasen. Hvis den ikke finnes, last den ned og så lagre den i databasen. Neste gang fetch() får beskjed om å hente URLen, ligger den nå i databasen.

 

3. RSS-feeds har et felt kalt ttl, som inneholder hvor lenge det skal gå før feeden må hentes på nytt. (mer om hvordan RSS en bygd opp). Du kan hente ut denne, og lagre den sepparat i databasen. Dermed kan fetch() bare returnere RSS fra databasen dersom den ikke har gått ut på dato. Hvis den har gått ut på dato, hent ned på nytt og lagre oppdatert versjon og oppdatert utløpsdato i databasen. Hvis dette er litt uggent å få til, kan du bare si at hver RSS skal oppdateres hver 30 min (f.eks.).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...