madompa Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 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
ahlt Skrevet 26. juli 2008 Del Skrevet 26. juli 2008 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
Per Kristian Skrevet 30. juli 2008 Del Skrevet 30. juli 2008 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
madompa Skrevet 1. august 2008 Forfatter Del Skrevet 1. august 2008 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
grimjoey Skrevet 1. august 2008 Del Skrevet 1. august 2008 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
madompa Skrevet 1. august 2008 Forfatter Del Skrevet 1. august 2008 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
grimjoey Skrevet 1. august 2008 Del Skrevet 1. august 2008 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. Lenke til kommentar
madompa Skrevet 2. august 2008 Forfatter Del Skrevet 2. august 2008 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
JohndoeMAKT Skrevet 2. august 2008 Del Skrevet 2. august 2008 Da viser du først stale med en "updating" melding og når du har hentet inn ferske data bytter du ut de gamle. Det er forresten mer korrekt å bruke f.eks class="loading" i stedet for <img>. .class { background-image : url( spinner.gif ); } Lenke til kommentar
Per Kristian Skrevet 2. august 2008 Del Skrevet 2. august 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå