Performance PHP AJAX
Dome
- https
Hallo,
ich bin relativ neu auf dem Gebiet PHP Klassen und Ajax sowieso.
Momentan kämpfe ich sehr mit performance Problemen und habe sehr "umständlichen" Code.
Also ich habe eine index Datei da ist auch der Code für Ajax drin und dort wird auch die Datei menu_oben eingebunden. Menu_oben "baut" ein Menü und je nachdem Welcher Menüpunkt ausgewählt wurde wird dann Ajax aufgerufen, damit dann eine neue PHP Datei geladen wird. Diese verarbeitet dann einige Informationen und dann wird Inhalt zurückgegeben und mit Ajax ausgegeben.
Jetzt habe ich allerdings das Problem, dass in menu_oben einige Klassen eingebunden werden und in den Variablen dieser Klasse lege ich Informationen ab.
Die gleichen Klassen werden später von der von Ajax aufgerufenen Datei wieder eingebunden aber dann sind die Informationen leider weg.
Außerdem glaube ich das es nicht gut gelöst von mir ist die gleichen Klassen wieder und wieder einzubinden (bei jedem Aufruf den Ajax macht). Das kostet nämlich ziemlich Ressourcen, oder? Ist klar geworden was mein Problem ist? Habt ihr irgendwelche Ideen wie ich das machen kann?
Schönen Abend noch Dome
Lieber Dome,
Warum postest Du im Themenbereich "HTTP", wenn Dein Problem doch eher in der "Programmiertechnik", bzw. bei "PHP" liegt?
Also ich habe eine index Datei da ist auch der Code für Ajax drin und [...]
Mit anderen Worten, Du willst, dass meine Glaskugel Dir die Lösung Deines Problems nennt.
Ist klar geworden was mein Problem ist?
Ja, Dein Problem ist, dass Du selbiges nicht auf das Wesentliche reduziert beschreiben kannst. Deshalb weißt Du auch nicht, welche Code-Ausschnitte hier sinnvollerweise gepostet werden sollten, damit irgendwer auch nur den Ansatz einer Ahnung hat, was Du überhaupt getan hast.
In diesem Zusammenhang ist es mehr als ratsam, nochmals die Tipps für Fragende zu lesen.
Habt ihr irgendwelche Ideen wie ich das machen kann?
Nö.
Liebe Grüße,
Felix Riesterer.
Tut mir Leid ich wollte eigentlich unter PHP posten :\
Hi,
Jetzt habe ich allerdings das Problem, dass in menu_oben einige Klassen eingebunden werden und in den Variablen dieser Klasse lege ich Informationen ab.
Die gleichen Klassen werden später von der von Ajax aufgerufenen Datei wieder eingebunden aber dann sind die Informationen leider weg.
Natürlich sind sie das - weil das Anfordern per AJAX einen neuen Request darstellt, und damit auch den Start einer vollkommen neuen serverseitigen Scriptinstanz.
Das hat nichts mit OOP zu tun, sondern damit, wie PHP im Einsatz auf einem Webserver nun mal arbeitet.
Sessions sind eine Möglichkeit, Daten über mehrere Scriptinstanzen hinweg zu „erhalten“ (d.h., sie werden automatisch gespeichert und wieder geladen).
Außerdem glaube ich das es nicht gut gelöst von mir ist die gleichen Klassen wieder und wieder einzubinden (bei jedem Aufruf den Ajax macht). Das kostet nämlich ziemlich Ressourcen, oder?
Zum einen ist das erst mal vernachlässigbar, das wird nur bei wirklich großen Projekten relevant,
und zum anderen geht es gar nicht anders, s.o.
Man kann Objektinstanzen zwar auch in Sessions „ablegen“ - aber dabei werden auch nur die eigentlichen Daten gespeichert, und der Scriptcode muss trotzdem eingelesen und geparst werden, wenn ein solches Objekt dann „wieder hergestellt“ wird.
Ist klar geworden was mein Problem ist?
In erster Linie ganz klar fehlendes Grundlagenwissen.
MfG ChrisB
Hallo ChrisB,
das ist mir alles durchaus bewust. Deshalb dachte ich und Frage ob es auch eine andere möglichkeit gäbe.
Hello,
Sessions sind eine Möglichkeit, Daten über mehrere Scriptinstanzen hinweg zu „erhalten“ (d.h., sie werden automatisch gespeichert und wieder geladen).
Wenn man Stammressource und AJAX auf dieselbe Session arbeiten lassen will, gehört dazu aber ein ausgeklügeltes Management, sonst bleibt die Seite hängen wegen eines Dead Locks. Der erste Request sperrt die Session, ist eventuell noch nicht fertig abgearbeitet, wenn dann schon der erste AJAX-Request eintrifft. Der muss aber warten...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Sessions sind eine Möglichkeit, Daten über mehrere Scriptinstanzen hinweg zu „erhalten“ (d.h., sie werden automatisch gespeichert und wieder geladen).
Wenn man Stammressource und AJAX auf dieselbe Session arbeiten lassen will, gehört dazu aber ein ausgeklügeltes Management, sonst bleibt die Seite hängen wegen eines Dead Locks. Der erste Request sperrt die Session, ist eventuell noch nicht fertig abgearbeitet, wenn dann schon der erste AJAX-Request eintrifft. Der muss aber warten...
Was genau willst du da als Lösung ausklügeln? Dass ein PHP-Script auf die Freigabe der Session-Datei warten muss, wenn grad eine andere Instanz sie in der Mache hat, ist so, ja. Aber das PHP-Script wird wohl kaum so geschrieben sein, dass da eine Schleife läuft, in der auf das Eintragen eines bestimmten Wertes in diese geöffnete Session gewartet wird. Denn das ist ja von vorn herein nicht möglich. Ein Dead-Lock entsteht, wenn gegenseitig auf die Freigabe(n) von Ressourcen gewartet wird. Wir können davon ausgehen, dass PHP-Scripte sich nicht wegen der Session-Datei aufhängen, höchstens verzögert werden.
Da also eine geöffnete Session nicht auf die Daten anderer Nutzungen der selben Session warten kann, sind auch die Ajax-Requests selbst nicht gegenseitig voneinander abhängig sondern ebenfalls höchstens verzögert. Das macht in der Regel nichts, wenn sie asynchron laufen.
Dead-Lock-Situationen können an anderer Stelle auftreten, beispielsweise bei mehrteiligen Datenbankaktionen, die mit explizitem Locking sich gegenseitig die Tabellen sperren. Das passiert aber nur zwischen zwei Users - inklusive dem Fall, dass der eine einmal mit Session und einmal ohne Session parallele Requests laufen hat - denn bei mehreren Requests eines Users mit Session verhindert ja schon das Schlangestehen an der Session, dass zwei DBMS-Aktionen gleichzeitig laufen. Probleme sehe ich da nur, wenn man hier versucht, die Session so schnell wie möglich wieder zu schließen, und dann noch eine Datenbankaktion startet, die von einem Dead-Lock betroffen sein könnte. Aber auch das passiert nur, wenn man explizites Locking verwendet, ohne sich schon allein deswegen Gedanken über Dead-Locks gemacht zu haben. Sich gegenseitig blockierende Datenbankabfragen, ohne dass man selbst Locking verwendet, wären ein Fehler des DBMS, gegen den man als Außenstehender nichts machen kann, weil man nicht sehen kann, welcher andere Nutzer da grad was am Laufen hat.
Auch Dateioperationen können und sollten von Locks begleitet sein. Eine einzelner Datei-Lock kann aber wie bei der Session nur zum Schlangestehen führen. Dead-Locks treten nur dann auf, wenn während eines Locks ein zweiter benötigt wird, der aber gerade von jemand anderem belegt ist, der auf die Freigabe des ersten wartet. Solange also keine zwei Locks geschachtelt werden, gibt's ein bisschen Schlangestehen und das war's.
Auf der Client-Seite können ebenfalls Dead-Locks programmiert werden, die haben dann aber genauso wie die DBMS-Dead-Locks unabhängig vom Session-Mechanismus PHPs.
Lo!