2009-08-01 10 views
1

Ich entwickle eine vertikale Suchmaschine. Wenn ein Nutzer nach einem Artikel sucht, lädt unsere Website zahlreiche Feeds aus verschiedenen Märkten. Es dauert leider sehr lange, den Inhalt des Feeds schnell zu laden, zu parsen und zu ordnen, und der Benutzer verspürt eine gewisse Verzögerung. Ich kann diese Feeds weder in der Datenbank speichern noch zwischenspeichern, da sich die Inhalte der Feeds ständig ändern.Prozess läuft gleichzeitig

Gibt es eine Möglichkeit, mehrere Feeds zur gleichen Zeit in PHP gleichzeitig zu verarbeiten? Sollte ich popen oder es dort eine bessere php Parallelverarbeitungsmethode verwenden?

Danke!

Russ

Antwort

1

Wenn Sie curl verwenden die Feeds zu holen, könnten Sie in der Funktion curl_multi_exec, einen Blick darauf werfen, die mehrere HTTP-Anfragen parallel zu tun erlaubt.
(Das gegebene Beispiel ist zu lang hier kopiert werden.)

, dass zumindest erlauben würden Sie weniger Zeit damit verbringen, den RSS-Feeds zu holen ...


Betrachtet man Server fast nichts tut, wenn Es wartet darauf, dass die HTTP-Anfrage beendet wird, die Parallelisierung würde nicht schaden, schätze ich.
Parallelisieren Parsing dieser Feeds, auf der anderen Seite, könnte einige Schäden, wenn es eine CPU-intensive Operation ist (möglicherweise, wenn es XML-Parsing und all das ist).


Als Nebenbemerkung: Ist es wirklich nicht möglich, einige dieser Daten cachen? Event, wenn es nur für ein paar Minuten ist?
einen cron-Job Mit den am häufigsten verwendeten Daten und speichern sie im Cache, zum Beispiel zu holen, könnte helfen, eine Menge ...

Und ich glaube, eine Website als wirklich schnell ist wichtiger für die Nutzer zu reagieren wirklich aktuell bei den zweiten Ergebnissen ... Wenn deine Seite nicht antwortet, gehen sie woanders hin!

0

Ich stimme zu, die Leute werden die Zwischenspeicherung viel früher verzeihen, als sie eine träge Reaktionszeit vergeben werden. Wiederholen Sie einfach alle paar Minuten.

0

Sie müssen eine Ergebnisseite einrichten, die mehrere simultane Anfragen über JavaScript an den Server ausführt. Sie können dies mit einer einfachen AJAX-Anfrage erreichen und dann die zurückgegebenen Daten in das DOM einspeisen, sobald es fertig geladen ist. PHP unterstützt zur Zeit kein Threading. Die Parallelisierung der Anfragen ist derzeit die einzige Lösung.

Hier einige Beispiele jQuery über Remote-Daten von einer Website zu laden und in das DOM zu injizieren: http://docs.jquery.com/Ajax/load#urldatacallback