login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Advies XML class

Offline NightFox - 29/09/2006 16:39
Avatar van NightFoxNieuw lid Ik ben bezig met een update script, het werkt zo:

xml__feeds -> hier staan alle feeds in met de feed data ( via serialize() )
xml__items -> hier staan alle items in, de 10 recentste feeds worden via een update functie in xml__feeds.xml_data gezet ( via serialize() dus ).

Om alles te updaten roep ik Update AllFeeds() aan. Deze checkt de DB welke feeds ouder zijn dan 15 min. En gebruikt dan UpdateFeed( $feedlink ) om deze te updaten. Het gaat om een redelijk groot aantal feeds/items. Ong. 180 feeds en, in het begin, dus 1800 items al. Aangezien we een maximaal aantal feed items van 10 hebben . Ik kan opzich wel wat code laten zien, hopelijk kunnen jullie mij advies geven zodat ik tijd kan besparen.

Zoals je wel ziet heb ik het script in PHP5 gemaakt, ik ben geen volleerd PHP5-er dus op een aanmerkingen zijn zeker welkom 

Comment: Ik heb een "Central Config File" zoals ik dat noem . Ik heb een klasse waarin alles staat. Zo hoef ik niet alle files af om mijn instellingen te veranderen. En hier kan ik makkelijk alles includen en de klasses starten . Vandaar dat er elke keer Central:: staat.

Code:

//Function UpdateFeed()
http://www.plaatscode.be/2758/

2 antwoorden

Gesponsorde links
Offline Thomas - 29/09/2006 16:50 (laatste wijziging 29/09/2006 16:51)
Avatar van Thomas Moderator Als je feed eenmaal binnen is zal het opslaan relatief snel gaan, lijkt mij.
Volgens mij moet je nog oude items weggooien? Of laat je deze in je database staan (deze wordt dan in hoog tempo vrij groot denk ik?).

Op query-gebied kun je in deze niet zoveel winst boeken denk ik. Het updaten van feeds kun je "bespoedigen" door "sneller op te hangen" als een site niet reageert (ik neem aan dat je voor het ophalen van feeds sockets gebruikt?). Gevolg is wel dat als een site te langzaam reageert, dat de feed niet geupdate wordt...

Je zou een mechanisme kunnen bedenken waarin je eerst probeert alle sites snel uit te lezen, en mochten er bepaalde feeds niet geupdate zijn, dan probeer je die feeds opnieuw uit te lezen met een wat hogere timeout etc. totdat een aantal retries is bereikt ofzo...

Op die wijze gaat het update-proces waarschijnlijk wat sneller, maar er is dan niet gegarandeerd dat al je feeds na afloop geupdate zijn. Mijn ervaring is ook dat de URI's naar feeds vaak veranderen.

Je script is en zal altijd minimaal zo snel (of langzaam ) zijn als de langzaamst aangeleverde feed .
Offline NightFox - 29/09/2006 17:13
Avatar van NightFox Nieuw lid Dank voor het doornemen , ik zal verder nog wat vertellen.

sorry voor de code hier maar het gaat om een mini code 

  1. public function DownloadFeed( $Url )
  2. {
  3. if( isset( $Url ) ) {
  4. if( $fp = @fopen( $Url, 'r' ) ) {
  5. $content = "";
  6. while( !feof( $fp ) ) {
  7. $content .= fgets( $fp, Central::$Handle_cache_Dlspeed );
  8. }
  9. fclose( $fp );
  10. }
  11.  
  12. //ErrorSettlement
  13. if( Central::$debug ) {
  14. if( !$fp ) {
  15. Central::$error->SetError( "Problem while opening file." );
  16. }
  17. }
  18. //Return $content
  19. return $content;
  20. }
  21. //Return boolean
  22. return false;
  23. }


Dit is mijn functie om het bestand op te halen. Ik lees hem namelijk niet in met de originele xml functies die in php ingebouwd zijn. De functie leest het hele bestand in en ontleed als het ware het bestand tag voor tag. Hij leest <channel>, <item>, <image> in. Deze zet hij allemaal in een array zodat ik heel gemakkelijk alles uit de array kan halen en plaatsen in de layout waar ik maar wil . Is het mogelijk dat sockets sneller zijn? Dan is het beter om deze te gebruiken want bij het updaten checkt hij eerst de hele feed. Ontleed hem dan (ga ik zo ff naarkijken eerst even typen ) en checkt dan of de xml_link al bestaad in de DB.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.179s