Hallo,
Ik heb voor mijn site (zie ondertitel) een redelijk zwaar script draaien, het haalt van ongeveer 70 verschillende site's de feeds op, zet dat om in nuttige dingen, kijkt of het al in de database voorkomt, en zo niet voegt het dan toe. Nu vond ik het al een wonder dat mij dit is gelukt om te maken, maar dit script is wel enorm traag kwam ik laatst achter
(parsetijden van+60sec.). Nu wordt dit script d.m.v een cronjob elk kwartier uitgevoerd, dus een echte ramp is het niet, maar als er meer feeds bijkomen is dit toch erg vervelend op de lange duur.
Ideeën die ik zelf al heb:
- Ik controleer eigenlijk bij elk artikel of de link niet al in de database voorkomt, maar ik heb het veld "link" ook al de waarde "UNIQUE" meegeven.. Dan zou ik de controle toch kunnen weglaten ? Of moet je de fouten dan afvangen oid ?
- Sommige feeds van site's zijn soms niet bereikbaar, dan gaat hij wachten totdat er een timout komt (denk ik), is dit op een of andere manier af te vangen ?
- Verder is mn code in zn algemeen prut, maar hier komt gebrek aan ervaring en kennis om de hoek kijken, en dat los je niet zo heel snel op.
Dat was het wel dacht ik zo, als iemand vragen heeft ben ik natuurlijk altijd bereidt om wat meer uitleg te geven
Ohja de code zelf, zou ik toch bijna vergeten:
De parsetime bij de laatste test was 122 seconde, wie helpt dat te verbeteren ?
Ik heb voor mijn site (zie ondertitel) een redelijk zwaar script draaien, het haalt van ongeveer 70 verschillende site's de feeds op, zet dat om in nuttige dingen, kijkt of het al in de database voorkomt, en zo niet voegt het dan toe. Nu vond ik het al een wonder dat mij dit is gelukt om te maken, maar dit script is wel enorm traag kwam ik laatst achter

Ideeën die ik zelf al heb:
- Ik controleer eigenlijk bij elk artikel of de link niet al in de database voorkomt, maar ik heb het veld "link" ook al de waarde "UNIQUE" meegeven.. Dan zou ik de controle toch kunnen weglaten ? Of moet je de fouten dan afvangen oid ?
- Sommige feeds van site's zijn soms niet bereikbaar, dan gaat hij wachten totdat er een timout komt (denk ik), is dit op een of andere manier af te vangen ?
- Verder is mn code in zn algemeen prut, maar hier komt gebrek aan ervaring en kennis om de hoek kijken, en dat los je niet zo heel snel op.
Dat was het wel dacht ik zo, als iemand vragen heeft ben ik natuurlijk altijd bereidt om wat meer uitleg te geven
Ohja de code zelf, zou ik toch bijna vergeten:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| <?php $sStart = microtime(); //verbinding maken $dbh=mysql_connect ("localhost", "loginnaam", "wachtwoord") or die ('I cannot connect to the database because: ' . mysql_error()); mysql_select_db ("metspek_rss"); // Haal feed gegevens uit de database $feed_sql = mysql_query("SELECT feed_id,url FROM feeds WHERE ondersteuning='1'"); if (!$feed_sql) { echo 'Could not run query: ' . mysql_error(); exit; } //begin de feeds langs te lopen while($feed = mysql_fetch_array($feed_sql)) { $data = ""; $rss = ""; // Haalt het RSS-file op en zet deze in een variabele if($file = fopen($feed['url'],"r")) { while(!feof($file)) { $data .= fgets($file, 1024); } fclose($file); } // Zet de RSS-feed in een array $p = explode("<item>", $data); for($i = 0; $i < count($p); $i++) { $item = $p[$i]; if($q = stristr($item, "<title")) { $r = stristr($q, "</title"); $rss[$i]['title'] = substr($q, 7, strlen($q) - strlen($r) - 7); $rss[$i]['title'] = html_entity_decode($rss[$i]['title']); $rss[$i]['title'] = str_replace(" ", " ", $rss[$i]['title']); } if($q = stristr($item, "<pubDate")) { $r = stristr($q, "</pubDate"); $rss[$i]['pubdate'] = strtotime(substr($q, 9, strlen($q) - strlen($r) - 9)); } if($q = stristr($item, "<link")) { $r = stristr($q, "</link"); $rss[$i]['link'] = substr($q, 6, strlen($q) - strlen($r) - 6); } } //hier dus het toevoegen controle enzo if($rss) { for($i = 0; $i < count($rss); $i++) { $link = $rss[$i]['link']; $check = mysql_query("SELECT * FROM links WHERE link='$link'"); $tel = mysql_num_rows($check); if($tel == '0') { //datum goedzetten if($rss[$i]['pubdate']) { $date = date("Y-m-d H:i:s", $rss[$i]['pubdate']); } else { $date = date("Y-m-d H:i:s"); } //toevoegen $titel = $rss[$i]['title']; $link = $rss[$i]['link']; $feed_id = $feed['feed_id']; $link_sql = mysql_query("INSERT INTO links (titel,link,datum,feed_id) VALUES ('$titel','$link','$date','$feed_id')"); } //einde tel } //einde forlus controleren en toevoegen rssfeed }//einde rss wel waarde } //einde whilelus voor feed gegevens // Statistieken maken.. $query = mysql_query("SELECT * FROM links"); $aantallinks = mysql_num_rows($query); $datum = date("Y-m-d H:i:s"); if(substr(date("i"), 0, 1) == '0') { if(date("H") == '00') { $dag = '1'; } else { $dag = '0'; } mysql_query("INSERT INTO linkstatistieken (aantallinks,datum,dag) VALUES ('$aantallinks','$datum','$dag')"); } $sEnd = microtime(); $aA = explode(' ',$sStart.' '.$sEnd); $tijd = round(($aA[2]+$aA[3])-($aA[0]+$aA[1]),8); echo '- Pagina gegenereerd in ' . $tijd . ' sec.'; ?> |
De parsetime bij de laatste test was 122 seconde, wie helpt dat te verbeteren ?
[ Voor 66% gewijzigd door Vold op 02-01-2005 18:56 ]