OOP und Ajax - Welches ist der beste Weg für eine Suche?

TribunM

Erfahrenes Mitglied
Moin,

ich möchte für eine neue Suche mich einmal an eine "infinite scroll" Variante probieren. Ich habe schon vieles durchgelesen, aber nicht das richtige bisher gefunden.
Meistens wird diese Art Suche in Verbindung mit einer Bildersuche z.B. verwendet ohne Filter oder Ähnlichem. Das ist auch einfach. Aber wie sieht es aus bei einer richtigen Suche mit mehreren Filtern und Abfragen?

Ich habe mir zwei mögliche Ansätze überlegt:

Exemplarische Dateien:
search.php -> löst die erste Suche aus und setzt die Werte des "Suchobjekts"
class_obj.php -> Initiiert das Objekt
do_ajax.php -> erweitert die Suchergebnisse per json

Ansatz 1 funktioniert ähnlich den Bildersuchen (zumindest nehme ich das an ^^)

Ich schicke eine Suche ab und erhalte einen Query mit z.b. 10 Ergebnissen. Wenn ich dann scrolle erweitert er den von 10 auf 20 usw. Er schickt praktisch jedesmal einen neuen Query nur anstatt per Klick onscroll. Klappt auch.

Mein Problem ist aber, dass bei vielen Filtern usw. der Query sehr lang ist und dementsprechend länger dauert auszuführen. Daher finde ich eine solche Methode nicht sinnvoll an dieser Stelle. Denn das nachladen dauert ein wenig zu lange. Bei einem Klick auf weiter wird ja die Seite eh neugeladen, da passt das, aber nicht bei onscroll. Finde ich zumindest.


Daher Ansatz 2.

Ich schicke einen Query mit einem Limit z.B. 100, der kriegt die Ergebnisse die ich in einem Objekt speichere, mit Anzahl der anzuzeigenden Ergebnisse, den Limit, wann ich einen neuen Query abschicken muss etc.

Damit das Objekt auch in der Seite mit dem ajaxcall, der die Ergebnisse dann erweitert, "global" verfügbar ist, gibt es jetzt meines Wissens zwei Möglichkeiten (bitte korrigiert mich, wenn ich falsch liege)

1. Ich speichere das Objekt in der Session
2. Ich speichere das Objekt in der Datenbank
3. ?

Das objekt lese ich aus und filter statt einen neuen query das objekt bzw. den array.

Ich habe das jetzt schon einmal mit der SESSION ausprobiert und das geht lokal zumindest um längen schneller, als immer einen neuen Query zu senden.
Allerdings wenn ich einen multidimensionalen Array mit z.b. je 10 Variablen pro key und 100 keys speichere und dann weitergehe auf die nächsten 100 usw. könnte das nach einer Zeit die Session stark aufblähen.

Kennt sich einer damit aus, wie sich so etwas auf die Performance auswirken kann und ob Datenbank oder evtl. ein ganz anderer Weg besser ist?

Wenn ihr Seiten oder Tuts habt, die das Thema behandeln auch englisch, nur her damit.

Ich bin gespannt auf eure Ideen und Vorschläge.

Grüße Tribbi
 
Zuletzt bearbeitet:
Da hier wohl keiner eine Idee oder etwas Ähnliches genutzt hat, poste ich mal meine Ergebnisse.
Das Objekt in der Session zu speichern funktioniert auch mit sehr großen arrays. Die Verarbeitung im nachhinein ist flotter, als einen neuen Request zu senden. Die Datenbankalternative ist performancetechnisch einen tick schneller, aber in der Handhabung ein wenig umständlicher. Denke bleibe bei der Session Variante.

Allgemein, wer etwas ähnliches vorhat und ein dauerhaftes Objekt benötigt und gerade mit dem Projekt anfängt, sollte sich den Einsatz eines Frameworks überlegen, da diese das häufig von "Haus" aus mitbringen und das Implementieren dann einfacher ist.

Ansonsten eine permanente Suche zu bauen mit wenigen Filtern oder gar keinen z.B. für Suchen ist sehr einfach und schneller, als eine "normale" Suche. Das ganze mit mehreren Filtern zu realisieren, ist deutlich schwieriger.

Joa soviel dazu. Vielleicht will doch noch Jemand einen Teil zum Besten geben.
 

Neue Beiträge

Zurück