[php] ontwijken van laadtijd rss feeds

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een site aan het bouwen waarop de user na ingelogd te hebben op een scherm komt waar een overzicht van informatie staat (home.php). Een deel daarvan komt uit RSS feeds van verschillende sites. Het parsen daarvan is allemaal soepel verlopen en geeft geen problemen.

Het probleem is echter dat het erg lang duurt voordat alles wordt weergegeven. De oplossing die ik hiervoor wilde gebruiken is de informatie alvast een pagina eerder preloaden en wegschrijven in m'n database, zodat ik die snel kan opvragen wanneer home.php wordt opgevraagd.

Dat preloaden moet dus gebeuren op de login pagina (en daarnaast op aanvraag van de user door een andere link, maar dat terzijde). De server + mysql database staat niet onder mijn beheer, dus permanent scriptjes daarop draaien kan naar mijn weten niet.

Mijn vraag is hoe ik dat wegschrijven van die feeds het best kan aanpakken. Het is essentieel dat die login pagina snel wordt weergegeven. Het preloaden moet dus waarschijnlijk pas beginnen wanneer de pagina helemaal geladen en weergegeven is.

Met behulp van frames is dat waarschijnlijk op te lossen, maar ik weet dat het gebruik van frames niet echt gewaardeerd wordt (of in dit geval wel?). Een andere oplossing is een popup te geven naast het login scherm die zichzelf weer sluit wanneer geladen. Het voordeel daarvan is dat de user het preloaden niet kan onderbreken. Maar het is natuurlijk weer erg onpraktisch om met popups te werken aangezien ongeveer iedereen tegenwoordig voorzien is van popup blockers en er dan alsnog niets van terecht komt.

Misschien is er ook nog wel een manier om dit met een of ander javascriptje op te lossen, maar daar ben ik niet zo bekend mee. Zou iemand mij kunnen adviseren over de beste manier om dit aan te pakken _/-\o_ ? Mischien wel een heel andere manier dan ik nu voor ogen heb?

Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-09 18:27

pjvandesande

GC.Collect(head);

Ik zou de feeds zelf uitlezen. Dus gewoon elke 10 min zelf alles feeds uitlezen en in een database stoppen.

Je kan dit doen met PHP ism CrownJob bijvoorbeeld. Maar je kan er ook een kleine applicatie voor schrijven.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
questa schreef op donderdag 06 januari 2005 @ 11:09:
Ik zou de feeds zelf uitlezen. Dus gewoon elke 10 min zelf alles feeds uitlezen en in een database stoppen.

Je kan dit doen met PHP ism CrownJob bijvoorbeeld. Maar je kan er ook een kleine applicatie voor schrijven.
probleem is dat ik zelf niet over een server beschik (ik word gehost door mijn uni). Daarnaast is de enige computer die ik heb degene waar ik naast slaap en ik wil 'm niet de hele tijd aan hebben staan. Het doel is een site te maken die op zichzelf staand kan functioneren.

Of mis ik nou wat je me wilt vertellen?

Acties:
  • 0 Henk 'm!

  • mtak
  • Registratie: Juli 2002
  • Niet online
Ja want hij zegt dat er binnen php(op applicatie niveau dus) een script is wat ook een soort van cronjobs kan uitvoeren.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Bovenin je homepage.php file:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?PHP
if(file_exists('./cache/c'.hierwattimefunctions.'.html')){
  include die file
  exit;
}

START OUTPUT BUFFER
HIER JE RSS LADEN
LEES DE BUFFER UIT
file_put_contents('BUFFER');
?>

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Waarom niet gewoon doen wat je nu ook al doet, maar dan na het parsen de boel in een database opslaan. Als de info ouder is dan x minuten (10, 30, wat er voor jou werkt) haal je het opnieuw op.

Dan ben je niet helemaal van je probleem af, maar dan beperk je het tot 1 user elke x minuten. Dit werkt uiteraard alleen bij sites die redelijk druk bezocht zijn (vaker dan eens in de x minuten :) )

Werkt dat niet kun je nog kiezen om de rss feeds in een iframe te laden of met clientside script in te laden en daarna in je layout te vrotten. Op die manier staat je pagina er wel snel, maar komen de rss feeds een paar sec later pas (net als grote images)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Je zou kunnen proberen om je website een lokale kopie te laten bijhouden van de RSS feed. Als de lokale kopie ouder is dan x minuten, haal je hem opnieuw op. Op deze manier hoef je niet voor elke hit de RSS feed op te vragen. Bij de Tweakers.net tracker die hier ooit was te downloaden was dat ook zo gedaan:
code:
1
2
3
4
5
6
7
8
9
10
$file = "/usr/local/www/data/tweakers.net/tnet.txt";
if(time() - filemtime($file) > 300) {
    $fp=fopen("http://www.tweakers.net/turbotracker.dsp","r");
    $news_content = fread($fp,10000);
    fclose($fp);
    // doe dingen
} else {
    $fp = fopen($file,r);
    // doe dingen
}


Dit is natuurlijk een uitgeklede versie van het geheel, maar ik denk dat dit het principe wel verduidelijkt.

Een andere optie is (als ik me niet vergis) misschien om de zooi in aparte iframes te laden, die kunnen dan apart van de rest van de pagina worden opgehaald. (elk frame is een aparte http request)

edit:
Ik moet voortaan echt sneller typen: nu ben ik twee keer spuit 11 ;)

[ Voor 7% gewijzigd door PhoeniX- op 06-01-2005 11:22 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank jullie voor de snelle reacties. Hiermee kom ik als het goed is wel ver genoeg. Van het bestaan van cronjobs wist ik niets af, dus ik heb weer wat nieuws te bestuderen. Er staat genoeg over op 't net, dus dat gaat wel lukken.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

't Is ook wel netjes om dergelijke dingen goed met HTTP op te lossen (ik neem aan dat je ze via HTTP uitleest). Je kunt dan namelijk een If-modified-since header meegeven in de request en zo zelf je cache bijhouden op basis van de vraag of de rss feed wel geupdatet is in de tussentijd. Scheelt je ook een zutje dataverkeer. (e.e.a. hangt natuurlijk af van hoe vaak jouw pagina bezocht wordt t.o.v. hoe vaak de RSS feed geupdatet wordt).

Het enige jammere bij dat soort oplossingen is dat er dan altijd 1 bezoeker de beer is, want die moet langer wachten omdat hij/zij nou net degene was waarbij de cache geupdatet moet worden. Wat dat betreft is een cronjob beter.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1